分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

一个有趣的js隐式转换的问题

发布时间:2023-09-06 02:08责任编辑:林大明关键词:js

一个有趣的js隐式转换的问题

在chrome的控制台中打印一下表达式

[] + {} //结果为 [object object]

然后调整顺序打印

{} + [] //结果为 0

然后将两个表达式组合一下

{} + [] === [] + {} //true

wtf???

原理解释如下:
一般的类型转换的时候, 面对 + , 首先调用 valueOf^[1]进行转换, 如果转换的结果不是
基本类型, 那么采用 toString() 方法进行转换, 所以

[]+{} //结果Wie [object + object]

但是 {} 在js或者很多语言中是代码块的区别标志, 所以在首位的话, 会被认为是 blank block 而
忽略, 所以 +[], 即 +"", 最终的结果会是 0

{}+[]// 0

而最终的

{}+[] === [] + {}//true 是因为 chrome 默认在这种判断的外边增加了 括号, 所以两个字符//"[object object]" === "[object object]" 自然就是 true 了.

[1] Date除外

一个有趣的js隐式转换的问题

原文地址:https://www.cnblogs.com/asdfq/p/9419102.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved