{} .hasOwnProperty()如何工作?

时间:2018-11-09 10:09:26

标签: javascript

假设我有一个对象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循环会起作用吗?两者是否相等都是明智的?

谢谢您的解释...

1 个答案:

答案 0 :(得分:3)

  

下面两个有什么区别

第一个告诉您对象是否具有名称为 "1"的属性。第二个告诉您数组是否具有 value 为1的 entry ,如果是,则为数组中的位置。那是完全不同的事情。请注意,hasOwnProperty根本没有查看属性的 value ,而只是查看它是否存在。您将从true获得相同的结果(({"1": "foo", "2": "bar"}).hasOwnProperty("1"))。

  

我的问题是,在调用这两种方法时,for循环会发挥作用吗?

在任何现代JavaScript引擎上均不在hasOwnProperty中。在indexOf中是。

  

和复杂度都相等吗?

不,一点也不。 indexOf将是线性(O(n))。 hasOwnProperty将小于该值,通常大大小于该值。即使在最坏的情况下(未优化的对象),也将更多地遵循哈希字典查找的方式。