假设我有一个对象var a = {"1": 1, "2": 2}
和一个数组var b = [1, 2]
下面两个有什么区别?
a.hasOwnProperty('1'); // Returns true
b.indexOf(1); // Returns 0, which is the index
同时调用这两种方法时,for
循环会起作用吗?两者是否相等都是明智的?
谢谢您的解释...
答案 0 :(得分:3)
下面两个有什么区别
第一个告诉您对象是否具有名称为 "1"
的属性。第二个告诉您数组是否具有 value 为1的 entry ,如果是,则为数组中的位置。那是完全不同的事情。请注意,hasOwnProperty
根本没有查看属性的 value ,而只是查看它是否存在。您将从true
获得相同的结果(({"1": "foo", "2": "bar"}).hasOwnProperty("1")
)。
我的问题是,在调用这两种方法时,
for
循环会发挥作用吗?
在任何现代JavaScript引擎上均不在hasOwnProperty
中。在indexOf
中是。
和复杂度都相等吗?
不,一点也不。 indexOf
将是线性(O(n)
)。 hasOwnProperty
将小于该值,通常大大小于该值。即使在最坏的情况下(未优化的对象),也将更多地遵循哈希字典查找的方式。