惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
A
About on SuperTechFans
G
Google Developers Blog
B
Blog RSS Feed
F
Fortinet All Blogs
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
IT之家
IT之家
P
Proofpoint News Feed
美团技术团队
量子位
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
B
Blog
有赞技术团队
有赞技术团队
U
Unit 42

博客园 - 川川哥哥

学习javascript-我的经验和建议(乱译) javascript高性能编程笔记(个人自用) css3基础知识提纲 html5基础知识提纲 javascript语言精粹----笔记 javascript和jquery窗口定位方法对应表 利用C#编写一个简单的抓网页应用程序 对C#开发两个基本原则的深入讨论(转) ASP编程中15个非常有用的例子 - 川川哥哥 - 博客园 oracle9i使用OMS备份数据 如何清除掉归档日志文件? 雅虎公司C#笔试题[转] .NET 访问 Oracle 数据库相关 [转] 从ASP.NET1.1到2.0迁徙所遇到的 IIS无法显示ASP 最终幻想Ⅸ 最终幻想X小说 经典音乐country roads歌词 06年及以前韩国星际职业联赛及选手资料
一道有趣的javascript小题
川川哥哥 · 2013-04-10 · via 博客园 - 川川哥哥

在国外网站上看到一道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];