首先,问“这个问题(英文)”的人是个天才,他怎么会遇到这样的一个问题。 其次,回答这个问题的人更是一个天才,我难以想象他会回答这个问题,更难以想象的是,他的回答是如此的详细和丰富和完整,真正称得上诲人不倦。

既然遇到了这个问题,我们不妨也跟着提高一下。

这是一个Javascript 语言题目,一个完全有效的等式,不信自己可以试一下,下面看看高人的题解:

++[[]][+[]]+[+[]]

如果把这段表达式拆分开来,它相等于:

++[[]][+[]]
+
[+[]]

在 JavaScript 里,+[] === 0 是完全正确的。 + 会把一些字符转化成数字,在这里,这个式子会变成 +""或 0。

因此,我们可以简化一下(++ 比 + 有更高的优先级):

++[[]][0]
+
[0]

因为 [[]][0] 的意思是:获取 [[]] 的第一个元素,这就得出了下面的结果:

  • [[]][0] 返回内部数组 ([])。根据语言规范,我们说 [[]][0] === [] 是不正确的,但让我们把这个内部数组称作 A,以避免错误的写法。
  • ++[[]][0] == A + 1, 因为 ++ 的意思是”加一”。
  • ++[[]][0] === +(A + 1);换句话说,你得到的永远是个数值( +1 并不一定得到的是个数值,但 ++一定是)。

同样,我们可以把这一堆代码简化的更清晰。让我们把 A 换回成 [] :

+([] + 1)
+
[0]

在 JavaScript 里,这也是正确的:[] + 1 === "1",因为 [] == "" (这相当于一个空的数组的内部元素连接),于是:

+([] + 1) === +("” + 1),并且
+("” + 1) === +("1"),并且
+("1") === 1

让我们再次简化一下:

1
+
[0] 

同样,在 Javascript 里,这是正确的:[0] == "0",因为这是相当于一个有一个元素的数组的内部元素的连接。 各元素会使用,分隔。 当只有一个元素时,你可以推论出这个过程的结果就是它自身的第一个元素。

所以,最终我们得到 (数字 + 字符串 = 字符串):

1
+
"0"=== "10" // 耶!

如果你想知道更详细的信息,请访问这里(英文)。

原文地址:为什么 ++[[]][+[]]+[+[]] = 10?

转载于:https://www.cnblogs.com/oklfx/p/8355990.html

++[[]][+[]]+[+[]] == 10 //true相关推荐

  1. 深入理解闭包系列第五篇——闭包的10种形式

    前面的话 根据闭包的定义,我们知道,无论通过何种手段,只要将内部函数传递到所在的词法作用域以外,它都会持有对原始作用域的引用,无论在何处执行这个函数都会使用闭包.接下来,本文将详细介绍闭包的10种形式 ...

  2. woo 10到任意进制,任意数值到十进制 之间转换

    -- 10到16进制 print(_to(10,16)) -- 'a' -- 16到10进制 print(_to('a',10,true)) -- 10

  3. PowerBuilder 10 下调用FoxitPDFSDK_AX_Pro.ocx浏览打印PDF文件

    在PowerBuilder中浏览.打印PDF文件,该代码已经在PB 10.5版本下测试可用. 使用的控件为FoxitPDFSDK_AX_Pro.ocx,该控件无水印,亲测可用. 具体操作步骤如下: 1 ...

  4. 2017.10.6 P97-zhx

    (我向苍天续一秒) T1 a [问题描述] 你是能看到第一题的friends 呢. --hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀zhx.何大爷今天为 字符串定义了新的权值计算方法.一个 ...

  5. 10 个你可能还不知道的很酷JavaScript特性

    英文 | https://javascript.plainenglish.io/5-cool-javascript-features-you-might-not-know-about-yet-f2fc ...

  6. 【日常学习】【搜索递推和其他】10.21.2015校内测试总结

    哭瞎了···昨天夜里写了一半多的博客因为卡机就这么没了TUT今天重新写,浪费我多少时间TUT 第一题 RQNOJ358 线段 画个图就知道是两点间距离的二倍···(我太傻竟没看出来) 但是!这是小圆圆 ...

  7. Go 学习笔记(45)— Go 标准库之 flag(命令行参数解析)

    1. 参数解析说明 import "flag" flag 包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个 set 集合.每条都有各自的状态参数. 使用 f ...

  8. Python 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable

    1. classmethod classmethod 修饰符对应的函数不需要实例化,不需要 self 参数.第一个参数需要是表示自身类的 cls 参数,能调用类的属性.方法.实例等. class Pe ...

  9. python中不同进制的整数之间可以直接运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

最新文章

  1. ThinkPHP5执行流程分析
  2. 部分博客中的代码已放到了GitHub上,欢迎大家下载阅读!
  3. Hive元数据信息表详解
  4. Dotnet Core多版本API共存的优雅实现
  5. 国际图形学大会(SIGGRAPH)2017届主席竞选答辩是如此场景
  6. php 使用csv海量数据导出类
  7. SPSS 百度网盘免费下载
  8. 计算机二级修改并应用基本简历模板,2020年新版个人简历模板大全可编辑(word版).docx...
  9. 【福利帖】当我谈学习视觉时,我谈些什么
  10. 《基础水文数据库》应用软件-水文预报中PA值计算
  11. Leetcode 300-最长递增子序列
  12. VCS第一讲:vcs和verdi演示一个简单的验证case
  13. RT-Thread物联网操作系统介绍:5、串口打印
  14. 汇编总结:mov指令
  15. python freshman day2
  16. Java成员方法getinfo_成员方法
  17. 【时序】Informer:用于长序列预测的高效 Transformer 论文笔记
  18. 拼团小程序服务器配置,拼团小程序的拼团活动怎么设置?
  19. 5G 网络切片构建方法
  20. git 推送出现 quot;fatal: The remote end hung up unexpectedlyquot; 解决方案

热门文章

  1. 二级计算机vf题型,2010计算机等级考试二级VF考试题型与解题技巧
  2. 陕西师范大学计算机科学学院保研院校,陕西师范大学计算机科学学院量子信息学保研细则...
  3. python 函数特殊属性
  4. opencv-api getAffineTransform()
  5. flask 重定向(redirect)和会话(session)
  6. 信息安全完全参考手册之风险分析(第二章)
  7. 职场真实故事计划##职场干货# 职场晋升之路
  8. Exchange Server 2016 独立部署/共存部署 (七)—— DAG功能测试
  9. CVE-2020-16875: Microsoft Exchange远程代码执行漏洞通告
  10. Netty学习总结(6)——Netty使用注意事项