最高半折刷qq各种业务和钻(家里人自己开的,尽管放心,大家多捧捧场)

sking7

导航

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

今天看见博客网上有这样一篇新闻

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方法。。才会出现这样的结果

http://www.cnblogs.com/sking7/archive/2011/11/11/2245589.html

 

补充:

有如下代码

 

  1. var arr = [];  
  2. arr.valueOf() === arr; // true  
  3. [].toString(); // ""  
  4. String([]) // ""  
可见上述问题是有点问题的

。。。但可以证明 会先验证valueOf的值是不是基本类型

posted on 2012-01-13 13:03  G.N&K  阅读(231)  评论(0编辑  收藏  举报