博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道有趣的javascript小题
阅读量:7035 次
发布时间:2019-06-28

本文共 649 字,大约阅读时间需要 2 分钟。

在国外网站上看到一道javascript的题目:

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

值是多少?

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

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

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

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

于是,表达式

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

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

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

       ++i+[0];   ==>

4.    1+[0];   ==>

5.    1+[0].toString();   ==>

6.   结果"10"

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

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

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

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

 

转载于:https://www.cnblogs.com/Cohlint/archive/2013/04/10/3012442.html

你可能感兴趣的文章
Create and Alter View
查看>>
项目管理的“三边六拍”!
查看>>
HDU 1086 You can Solve a Geometry Problem too(水题,判断线段相交)
查看>>
<进击的巨人>和<枪王黑泽>两部漫画的观后感
查看>>
整理点dropdownList的应用
查看>>
RSS 入门简介
查看>>
确定我们在windows下架构解决方案
查看>>
jquery 拖动改变div 容器大小
查看>>
Distributed NLTK with execnet | StreamHacker
查看>>
XP风格
查看>>
系列文章--突袭HTML5之Javascript
查看>>
Java设计模式菜鸟系列(七)命令模式建模与实现
查看>>
WdatePicker日历控件用法
查看>>
[LeetCode] Flip Game 翻转游戏
查看>>
golang的连接池例子
查看>>
阿里云金融云服务器配置
查看>>
MongoDB查询并更新一粟
查看>>
浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
查看>>
Trusty API Reference
查看>>
Swift中可选型的Optional Chaining 和 Nil-Coalesce(Swift2.1)
查看>>