读“为什么 ++[[]][+[]]+[+[]] = 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的值是不是基本类型

转载于:https://www.cnblogs.com/sking7/archive/2012/01/13/2321468.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值