gpt4 book ai didi

javascript - Alert(++[[]][+[]]+[+[]]); 怎么样?计算为0?

转载 作者:行者123 更新时间:2023-11-28 14:46:27 24 4
gpt4 key购买 nike

alert(++[[]][+[]]+[+[]]); 怎么样?计算为0?这个过程叫什么,以便我可以阅读更多相关内容

最佳答案

表达式++[[]][+[]]+[+[]]实际上会返回字符串 '10' 。让我们来分解一下:

第 1 步:+[]

这是一个一元加运算符,后跟一个空数组文字。一元加法尝试将其后面的值转换为整数。在本例中,该值是一个数组:

+[]; // 0

// This is identical:
Number([]); // 0

返回值相当于调用[].toString()然后将结果提供给 Number()[].toString()将返回空字符串( '' )和 Number('')将返回0 .

Array.prototype.toString

The Array object overrides the toString method of Object. For Array objects, the toString method joins the array and returns one string containing each array element separated by commas.

Number .

In a non-constructor context (i.e., without the new operator), Number can be used to perform a type conversion.

所以,当我们改变 +[] 的出现时至0在源代码中,我们得到:

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

第 2 步:[[]][0]

这一步是一个简单的数组成员访问操作:首先定义一个具有一个嵌套(空)数组的数组,然后使用 [0] 访问第一个嵌套数组。 ,它只是返回 [] 。因此,如果我们替换表达式的这一部分,我们会得到:

++[] + [0]

第 3 步:++[]

++ <value>运算符首先尝试转换 <value>为一个数字,然后将该数字加 1。本例中将数组转换为数字的过程与 +[] 相同。位于第 1 步:[]首先转换为字符串(在本例中为 '',因为数组为空),然后转换为数字,再次返回 0 。最后,0增加 1 ,返回 1 。因此,如果我们替换表达式的这一部分,我们会得到:

1 + [0]

第 4 步:1 + [0]

这是故事中奇怪的部分。您可能希望其计算结果为整数 1 ,给出上面的信息,但实际上它将计算为字符串 '10' 。这是因为上例中的数组类型转换有 2 个步骤(首先是字符串,然后是数字)。这两个步骤是必需的,因为数组始终是算术运算符的操作数(即数学计算)。 +然而,运算符可以用作算术 + 运算符或字符串连接 运算符,后者始终优先。

尽快[0]转换为字符串,两个操作数都赋予 +运算符将被转换为字符串,因为一个操作数已经是一个字符串。如果我们现在用转换后的操作数替换表达式,我们就完成了计算表达式的最后一步:

'1' + '0'; // '10'

关于javascript - Alert(++[[]][+[]]+[+[]]); 怎么样?计算为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46232351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com