gpt4 book ai didi

javascript - 无论括号的数量如何,都可以通过括号表示法访问对象属性

转载 作者:行者123 更新时间:2023-11-28 16:56:43 26 4
gpt4 key购买 nike

可以通过执行以下操作通过括号表示法访问对象的属性:

let obj = {a: "test"}

obj["a"]

但是,我不知道还可以通过以下方式访问同一对象的属性:

let v = ["a"] // An array

obj[v]

obj[["a"]]

obj[[[[[[[[[["a"]]]]]]]]]]

只是想知道,这是为什么?

在将数组存储到变量中并错误地使用变量/数组而不是数组的第一项来访问对象的属性后,我偶然发现了这种行为,令人惊讶的是......它没有抛出错误,但是返回值。

最佳答案

所有对象键都是字符串。当您使用括号表示法 foo[bar] 时,您尝试获取的变量将被转换为字符串:

const bar = {
toString() {
return "hello";
}
}

const foo = {
hello: "world"
}

console.log(foo[bar]);

当数组转换为字符串时,会隐式调用join(",")。如果数组有单个值,则结果是字符串形式的单个值:

const arr = ["hello"];

console.log(arr.toString());
console.log(String(arr));
console.log(arr.join(","));

如果您有嵌套数组,每个数组都有一个项目,您仍然会从转换中得到一个字符串,因为 join() 还将所有成员转换为字符串,因此使用 String([["hi"]]) 你(大致)得到:

[["hi"]].join(",") -> String(["hi"]) -> ["hi"].join(",") -> String("hi")

因此,如果您提供一个数组作为键,只要每个数组中只有一个值,它就可以工作:

const foo = {
hello: "world"
};

const arr = [[["hello"]]];

console.log(foo[arr]);
console.log(foo[String(arr)]);
console.log(foo[arr.toString()]);
console.log(foo[arr.join(",")]);

关于javascript - 无论括号的数量如何,都可以通过括号表示法访问对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943429/

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