在python中,一个列表,即使它是一个类,也禁止它的实例创建更多的用户属性。
>> x = list()
>> x.new_attribute = 90
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'new_attribute'
即使类可能通过 __dict__
接受更多属性,这正如预期的那样抛出错误。这是有道理的。
尽管并不完全相似,但我的问题是 JavaScript 数组在被赋予属性时会表现得很奇怪。
let x = [1,2,3]
x.foo = "this is unexcpected"
console.log(x)
这将打印 [1, 2, 3, foo: "this is unexcpected"]
。这是我的问题,数组不是应该将所有键都设为自动生成的数字吗?我的意思是,如果我检查长度,它仍然是 3 并且它没有将 foo
算作通常意义上的数组的一部分,更多的是像 pop 这样的所有方法不适用于 key-value
一对。这很有道理,但如果允许这样做(添加键值对),以便它们可以用于存储有关数组的元数据,那么我会感到更难过,毕竟长度也是一种属性。还有一个问题,如果数组可以存储键值对,除了插入、弹出等一些方法外,它们与对象的区别是什么?