javascript - 为什么 "[][[]]"在 JavaScript 中未定义

标签 javascript arrays undefined

我们钟爱的 JavaScript 可能非常奇怪......

(![] + [])[+!+[] + +!+[]]                // 'l'
    + (![] + [])[+!+[]]                  // 'a'
    + ([![]] + [][[]])[+!+[] + [+[]]]    // 'i'
    + ([][[]] + [])[+!+[] + +!+[]]       // 'd'
 // Will output "laid"

JavaScript 产生这个输出的原因主要取决于数组的类型转换和 + 将“事物”转换为字符串的能力。 ![]//false+[]//0 我的问题是 JavaScript 如何成功地将 [][[]] 解析为未定义但拒绝 [][][] 作为语法错误

最佳答案

[] 根据上下文表示不同的东西

[][[]]

第一个 [] 创建一个新数组(数组文字语法)。

然后 that_array[[]] 尝试从该数组中读取属性(方括号属性访问器语法)。

属性名称是[](也是数组文字语法),它是一个数组,被转换为一个字符串:''

因为没有名为空字符串的属性,所以它解析为undefined

换句话说:

const array = [];
const propertyName = [].toString();
console.log(array[propertyName]);
[][][]

这个错误是因为当第一个 [] 创建一个数组时,第二个 [] 试图从它访问一个属性但是没有包含属性名称的值.它在值之前有 ],因此第二个 ] 是意外的。它永远不会到达第三个 []

关于javascript - 为什么 "[][[]]"在 JavaScript 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307089/

相关文章:

JavaScript 在 HTML 中保持图像变化

java - 如何以通用方式使用算术运算来减少原始数组?

python - 如果条件为真则写入数组

c# - 为什么 UInt16 数组的加法速度似乎比 int 数组快?

node.js - 在nodejs中运行Neo4j查询返回 "undefined"

java - if 函数的未定义运算符 - Java

javascript - 类型错误 : Cannot create property '_id' on string

javascript - 如何在滚动时更新 URL 哈希值(带目录)

javascript - HTML 元素用 "z-index"或 "append"放在前面?

javascript - undefined variable 何时抛出 Uncaught TypeError 而不是仅仅具有值 'undefined' ?