今天看见博客网上有这样一篇新闻
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
补充:
有如下代码
- var arr = [];
- arr.valueOf() === arr; // true
- [].toString(); // ""
- String([]) // ""
可见上述问题是有点问题的
。。。但可以证明 会先验证valueOf的值是不是基本类型