您的位置:首页 > Web前端 > JavaScript

一道有趣的javascript小题

2013-04-10 15:20 148 查看
在国外网站上看到一道javascript的题目:

++[[]][+[]]+[+[]];

值是多少?

虽然最js的语法还算熟,第一眼看到这个表达式的时候还是晕了.直接运行了一下,结果是字符串"10",

结果有点出乎意料,开始怀疑是不是某个浏览器的bug,又在四个浏览器里面都运行了一遍,均是此结果.

于是从结果开始倒推,推出了一些比较诡异逻辑.

首先+[],相当于Number([]),根据Number函数的转换规则,得到+[]=0;

于是,表达式

1.++[[]][+[]]+[+[]];==>

2.++[[]][0]+[0];==>

3.vari=[[]][0];//相当于取数组[[]]的第一项,也就是[]

++i+[0];==>

4.1+[0];==>

5.1+[0].toString();==>

6.结果"10"

结论:可见数组[]作为一元操作时,+[]相当于Number([]);而作为二元已上被操作数时,1+[],相当于1+[].toString();

javascript处处都是坑,稍不注意就踩进去了,实际工作中应尽量用常规语法,避免二义性,副作用,隐式转换等奇技淫巧

注:以上结论均为推导得出,若有错误,诚请指正!另外下面再给一个类似的例子可以验证下:

(![]+[])[0];


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: