Discuss / JavaScript / javascript的对象设计太混乱了,求解释。

javascript的对象设计太混乱了,求解释。

Topic source

为什么对象的键不像Python那样必须用引号,以下面为例

var xiaohong = {
    name: '小红',
    'middle-school': 'No.1 Middle School'
};

为什么不规定name必须为'name'才可以,取值的时候xiaohong[name]又不行,必须xiaohong['name'],

判断的时候又用'name' in xiaohong ,而不是name in xiaohong,必须要加双引号,感觉太混乱了,有没有人能解释一下啊?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

取值的时候xiaohong[name]又不行,必须xiaohong['name']

你这就没搞明白变量和字符串了

xiaohong.name 这个name是xiaohong的一个属性

xiaohong[name] 和 xiaohong[x]是一样的,这个name或者x是一个变量,能取到啥要看变量的值

xiaohong['name'] 这个'name'是确定的字符串

JS设计是比较乱,但这个地方是你概念理解的问题

谢谢廖大的解释,JavaScript对象的所有属性都是字符串,这是创建对象的时候没有加引号罢了,如果不是合格的变量名,那必须加引号。

现在理解了,只是我受到了Python字典的影响,如果在Python字典里这样设计的化肯定报错,可能这里它是一个对象吧。

还是觉得js设计有点不太好,虽然都看的懂。

js里的对象其实更应该用Python里的对象来类比,而不是字典,只是您一开始说“它由若干键值对组成”,让人很难不联想到字典,然后就被带入了

廖雪峰

#5 Created at ... [Delete] [Delete and Lock User]

因为js一开始设计的object既能做object,又能做映射表

zydchina818

#6 Created at ... [Delete] [Delete and Lock User]

语言的规定差异而已。

玩转ACE

#7 Created at ... [Delete] [Delete and Lock User]

var name = 'name';

console.log(xiaoming[name]);   // 等于:xiaoming.name 输出的值

听雨眠

#8 Created at ... [Delete] [Delete and Lock User]

你是蔷薇吗,之前在其他python的教程留言里见过你


  • 1

Reply