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

Posted 北山秋叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个有趣的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隐式转换的问题的主要内容,如果未能解决你的问题,请参考以下文章

有趣的JavaScript隐式类型转换

有趣的JavaScript隐式类型转换

深入浅出JavaScript中的隐式转换

js中有趣的隐式转化结构

深入详解函数的柯里化

简单说 通过JS的隐式转换,关键时刻救你一命