您的位置:首页 > 其它

读“为什么 ++[[]][+[]]+[+[]] = 10 ?”

2012-01-13 13:03 148 查看
今天看见博客网上有这样一篇新闻

http://news.cnblogs.com/n/128394/

解释的似乎已经够了。。

但在


  在 JavaScript 里,这也是正确的:[] + 1 === "1",因为 [] == "" (这相当于一个空的数组的内部元素连接)


解释不怎么明白。。有人在帖子中有下面解释:http://www.iteye.com/topic/1120799


先了解下+运算符。JavaScript中运算符 “+” 很简单,有两种意思

1,字符串连接

2,数字相加

运算时其它值都将转换成这两个类型。

JavaScript中有基本类型(undefined, null, booleans, numbers, strings)、对象类型(objects, arrays)和函数类型(functions)。

类型转换先将对象/函数类型转换成基本类型。然后在根据运算符“+”转成字符串或数字。


记得以前学 []==0的比较时,记得数组和对象会调用valueOf方法。。所以下面自己试了下

Array.prototype.valueOf=function (){return 'a';}
alert((1+[]));//1a
alert([0]+1);//a1


也证明了自己的想法。其实是调用的valueOf方法。。才会出现这样的结果

/article/6231406.html

补充:

有如下代码

var arr = [];

arr.valueOf() === arr; // true

[].toString(); // ""

String([]) // ""

可见上述问题是有点问题的
。。。但可以证明 会先验证valueOf的值是不是基本类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: