Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.1k views
in Technique[技术] by (71.8m points)

为什么数组(注意,是数组)竞然能作为下标访问普通JS对象的属性呢?

发现了一个非常奇怪的现象,不明所以。特请教大神,求解答!

首先定义了如下一个普普通通的JS对象:

const obj = {
    a: 'string0',
    b: 'string1',
    c: 'string2',
    d: 'string3'
}

然后通过以下方法,分别访问对象的属性

//方法一:
console.log(obj.a);       //"string0"

//方法二:
console.log(obj["a"]);    //"string0"

//方法三:
const prop1 = "a";
console.log(obj[prop1]);    //"string0"

//方法四:
const prop2 = ["a"];
console.log(obj[prop2]);    //"string0"

上述第一、二、三种访问对象属性的方法,都没什么稀奇的。

但是无意间发现,第四种方法也能正确访问对象的属性,这是为什么呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

我记得对象的键貌似只能是 SymbolString

所以取其他类型的键的时候,一律转成字符串,而 ['a'].toString ==='a'

第一次发现可以把对象放到方括号里作为键从对象取值的时候,我大喜过望,还以为自己发现了一个简便的封装私有属性的方法,结果是我太天真了??


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...