繁体   English   中英

Javascript对象属性出现问题-雄辩的Javascript示例

[英]Trouble with Javascript object properties - Eloquent Javascript example

var thing = {"gabba gabba": "hey", "5": 10};
show(thing["5"]);
thing["5"] = 20;
show(thing[2 + 3]); // = 20
show(thing[2]); // = undefined
show(thing[3]); // = undefined

我不明白为什么show(thing [2 + 3])= 20,而它下面的其他两个返回未定义。 2和3指的是什么? 有人可以帮我这个忙吗? 谢谢。

我不明白为什么show(thing [2 + 3])= 20,而它下面的其他两个返回未定义。

thing[2+3]计算结果为thing[5]==20 ),但是对象上不存在名称为“ 2”或“ 3”的属性-因此在访问时会产生undefined

2和3指的是什么?

它们是纯数字文字。

关键是thig不是数组,而是对象(键:值对)。 如果您想得到“嘿”,则需要执行以下操作:

show(thing["gabba gabba"]); // = "hey"

并且因为有一个键为“ 5”的条目,所以2 + 5起作用:

show(thing["5"]);   // = 10
show(thing[2 + 3]); // = 10

表达式thing[2]意思是在名称为"2" thing对象上找到一个属性。 由于属性名称是字符串,所以数字2将自动转换为字符串"2" 由于该对象没有这种属性,因此结果是undefined

表达式thing[2+3]意思是首先求值为5 2+3 然后将5从数字转换为字符串"5" ,然后找到具有该名称的thing的属性。 因此,结果为20

您已将“物”的第五项赋予20

thing["5"] = 20;

Javascript足够聪明,可以在您键入时理解

thing[2 + 3]

你真正想要的是

thing[5]

你不做的是

thing[3] + thing [2]

但是, thing [2]thing [3]没有值,因此它们以未定义的形式返回。 您需要给他们一个值,就像您给thing [5]赋予值20之前一样。

这就是JavaScript对象的工作方式。 您可以将它们视为具有键和值的HashMap。

在您的例子中,你已经有了一个HasMap对象调用thing它只有2对键值。 "gabba gabba"是第一个键的键,其值为“ hey ,第二对则以"5"键,其值为10 为了使其更易理解,我们在JavaScript中提供了一个名为Object.key()的函数,该函数可为您提供对象中拥有的键的集合:

Object.keys(thing);

其结果是:

["5", "gabba gabba"]

如您所见,键中没有23 ,因此如果您希望它们在其中,则应添加一对带有这些键和所需值的对:

thing[2] = "whatever";
thing[3] = "whatever";

那么密钥集合将是:

["5", "gabba gabba", "2", "3"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM