`
suoyihen
  • 浏览: 1386591 次
文章分类
社区版块
存档分类
最新评论

为什么++[[]][+[]]+[+[]]=10

 
阅读更多

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

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

  这是一个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" // 耶!

  如果你想知道更详细的信息,请访问这里

分享到:
评论

相关推荐

    数字电子技术基础第四版课后习题答案详解

    (2)解:CDBABCDADBCADCBADCBAABCDDABCDCABDCABCDBADCBADCBADCBACDABBABABAACDDACDCADCACDADCADCADCABBCDDBCDCBDCBCDBDCBDCBDCBAYCDBAY++++++++++++=+++++++++++++++++++=++ (3)解:MNLNMLNLMNMLNMLNMLY+++++++++...

    java中for(int i= 0; i<=10;i=i++)System.out.print(i);为什么无限输出0

    在本文中,我们将深入探讨一个有趣的`for`循环示例,并解释为什么该示例会导致一个无限循环并无限输出数字0。 #### 循环示例 考虑以下Java代码片段: ```java public class Test { public static void main...

    一年级20以内加减法口算题[001].pdf

    6. 错误纠正:由于文件内容可能是通过OCR扫描得到的,存在一些识别错误,如“19-11=10+9=16-7=2+15=16-15=15+3=9-4=20-1=11-10=6+8=2+5=2+6=10+1=17-16=13+4=20-1=1+2=20-3=2+7=19-6=15-12=9+1=14-1=5+2=13+7=19-4=3...

    计算 S=1!+2!+3!+...+N! C语言代码

    S += factorial(i); } printf("S = %d\n", S); return 0; } ``` 这段代码首先定义了一个名为`factorial`的递归函数,用于计算给定数字的阶乘。在`main`函数中,我们读取用户输入的N值,然后通过for循环迭代1...

    一年级20以内加减法口算题每150道.pdf

    8. 简单的数学逻辑:虽然题目是基础的加减法,但在解决一些涉及多个步骤的题目时,例如“15+3=18-7=5+1=10-1=12+5=8+9=11-2=15+1=19-11=7+13=10+9=16-7=2+15=13-4+11=16-15=15+3=9-4=10+4-7=20-1=11-10=6+8=18-7+2=2...

    C语言程序设计-功能:编写程序求无理数e的值并输出;计算公式为:e=1+11!+12!+13!+......+1n!当1n!

    C语言程序设计-编写程序求无理数e的值并输出;计算公式为:e=1+11!+12!+13!+......+1n!当1n!0.000001时e=2.718282;.c

    求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值

    求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字(1&lt;=a&lt;=9)。例如:2+22+222+2222+22222(a=2,n=5),a和n由键盘输入

    python 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字 (示例)

    # 题目: # 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。 # 分析: # 关键是计算出每一项的值。

    linux下GTK+2.0开发的单词数值计算器

    1、 按照规则计算单词的值,如果 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26, 如 WINJACK这个...

    三年级下册脱式计算题.doc

    这些题目属于小学数学中的混合运算,也就是我们常说的“脱式计算”或“带符号运算”。在解决这类问题时,我们需要遵循...通过反复练习此类题目,学生能够熟练掌握混合运算的步骤,为更高年级的数学学习打下坚实的基础。

    linux GTK+单词统计程序课程设计

    1、按照规则计算单词的值,如果A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 , 如 WINJACK这个...

    Python中的连接符(+、+=)示例详解

    前言 本文通过在一段示例代码中发现的问题... item += [0] * (10 - len(item)) print a print b print c 这段代码的意思是,有三个列表,需要在长度不为 10 的列表尾部填充 0,让其长度变为10。 输出如下: [1, 2, 3,

    小组作业1,小组作业1+1+1+1=1,matlab

    6码算法的误比特率性能。基于matlab,搭建BPSK+卷积编码+交织通信收发链路,仿真参数如下:1) 信源比特速率: 100 b R kbps =2) 卷积编码:码率为1/...交织:行列交织,交织器深度为100bit,宽度为10;5) 仿真点数:106

    求s=a+aa+aaa+aaaa+aa...a的值.docx

    3. 将`a`乘以10,模拟`a`后面添加一个零,以便生成下一项。例如,如果`a`原来是2,那么现在变成20。 4. 增加`i`的值,表示已经处理了一项。 循环完成后,我们打印出用户输入的`n`值以及序列的总和`sum`。这可以通过...

    C#语言编写求1!+2!+...+10!的源程序

    sum += Factorial(i); } Console.WriteLine("1! + 2! + ... + 10! = " + sum); } // 阶乘函数 static int Factorial(int n) { if (n == 0 || n == 1) return 1; else return n * Factorial(n - 1); } } `...

    计算Sn(求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值)

    Description 求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个...第一个为a ,第二个为n(表示有多少个数相加),其中a和n都是大于1且小于10的整数. Output 输出其和. Sample Input 2 5Sample Output 24690

    gtk单词计数器

    1、按照规则计算单词的值,如果A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 , 如 WINJACK这...

    10以内加减法练习题-直接打印版可重复做.pdf

    1. 5+4=9, 3+6=9, 4+2=6, 9+0=9, 2+7=9, 1+7=8, 6+4=10, 7+3=10, 2+3=5, 0+10=10, 10-2=8, 5-4=1, 2+6=8, 5+4=9, 8-3=5, 3+1=4, 67-2=65(可能是误输入,正确的应该是6-2=4), 5+5=10, 2-1=1, 3+3=6, 5-3=2, 06-5...

    一年级下册口算100道.pdf

    本资源为一年级数学口算100道题,涵盖了基本的加减乘除运算,旨在帮助一年级学生巩固数学基础和提高口算速度。下面将这些题目汇总成知识点,供教师和学生参考。 一、加法运算 * 重要知识点:加法的定义、加法的...

    史上最全的运放典型应用电路及分析[归类].pdf

    减法运算电路,如`−+−+=++=+=uuuRuRRRuuRRRuiFoi)(111212323 123211123231)1(iioFiFiFouuuRRRRuRRuRRRRRu−====−++=`,通过改变电阻分配,实现两个或更多电压的差值运算。 5. **积分运算电路**: 积分电路`...

Global site tag (gtag.js) - Google Analytics