码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-08-04 17:33:14      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:表达式   object   多语言   有趣   ===   控制   顺序   代码块   val   

一个有趣的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隐式转换的问题

标签:表达式   object   多语言   有趣   ===   控制   顺序   代码块   val   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!