读“为什么 ++[[]][+[]]+[+[]] = 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方法。。所以下面自己试了下
也证明了自己的想法。其实是调用的valueOf方法。。才会出现这样的结果
见/article/6231406.html
补充:
有如下代码
var arr = [];
arr.valueOf() === arr; // true
[].toString(); // ""
String([]) // ""
可见上述问题是有点问题的
。。。但可以证明 会先验证valueOf的值是不是基本类型
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的值是不是基本类型
相关文章推荐
- windows 10为什么抛弃IE浏览器?
- 为什么php中echo intval((0.1+0.7)*10) 结果为7而不是8?
- solaris 10 为什么没法再/home 下创建目录
- 为什么 ++[[]][+[]]+[+[]] = 10?
- IE10假死/未响应是为什么?
- javascript使用中为什么10..toString()正常而10.toString()出错呢
- php三目运算符?10-3>2?0:true?5:3,为什么结果是3呢?
- 为什么出现:warning: The 'compute_10' and 'sm_10' architectures are deprecated
- 【精】 为什么我要暂时放弃 windows 10
- IE10假死/未响应是为什么?
- 关于PHP浮点数之 intval((0.1+0.7)*10) 为什么是7
- 为什么 ++[[]][+[]]+[+[]] = 10?
- 为什么 ++[[]][+[]]+[+[]] = 10?(转)
- 为什么 ++[[]][+[]]+[+[]] = 10 ?
- 为什么我没有收到 “获取Windows 10” 的通知 - Windows 8.1
- Windows 10正式版为什么没有休眠选项? 找回win10休眠选项的方法
- javascript: ++[[]][+[]]+[+[]] = 10 ?为什么
- 为什么我的windows 10 电脑关机时,电脑灯延迟很久才熄灭?
- 为什么++[[]][+[]]+[+[]]=10
- 为什么 ++[[]][+[]]+[+[]] = 10 ?(javascript)