JavaScript Quirk - 数组增量

标签 javascript increment

为什么

++[[]][0] == 1

但是确实如此

++[]

抛出错误

它们不是一样的吗?我相信第一个示例在数组上执行索引读取,以便您在数组中获取数组。然后执行增量。如果是这样,为什么我不能做第二个例子?

最佳答案

++ 是赋值运算符。它需要一个有效的左侧操作数(即使它可以位于++的右侧)。

[] 只是一个值,而不是您可以分配的内容。

[[]][0] 评估为[],但它是有效的左侧,因为它指向现有数组中的元素。这样就可以了。

举一个希望不那么令人困惑的例子:

var a = 1
1++ // throws an error
a++ // works fine

a 中的值是什么并不重要。最坏的情况下,++ 将返回 NaN,只要它可以分配结果,就不会出现错误。

示例中唯一的 JavaScript 怪异之处是 +[] + 1 的计算结果为 1,因为空数组被强制转换为空字符串,然后显式为零 (+""0),然后添加到 1

++ 运算符始终强制转换为数字,与 + 不同,+ 可以满足 "" (因此 [] + 1 变为 ""+ "1")。因此,在分解 ++ 时,不要忘记强制操作数进行编号(这在您的示例中并不重要)。

关于JavaScript Quirk - 数组增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861426/

相关文章:

javascript - 无法使用 yaml.js 将 YAML 解析为 JSON

javascript - 在 JQuery 中为文本框创建按钮并动态分配单击功能

javascript - for 循环中后增量运算符的不同结果

java - 不同的for循环增量值

javascript - 从 Rails link_to 调用 jQuery 函数

javascript - 在 JavaScript 中递归调用 Web 服务会导致 StackOverflow

javascript - 为什么函数内的变量对该函数内声明的回调函数可见?

javascript - 我如何将下拉列表 html/css 附加到 jquery 1 行正文

javascript - Div值增量javascript

c - 后增量和预增量运算符