Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript {}.hasOwnProperty()是如何工作的?_Javascript - Fatal编程技术网

Javascript {}.hasOwnProperty()是如何工作的?

Javascript {}.hasOwnProperty()是如何工作的?,javascript,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的属性。第二个命令告诉您数组中是否有值为1的条目,如果有,它在数组中的位置。这些是

假设我有一个对象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的属性。第二个命令告诉您数组中是否有值为1的条目,如果有,它在数组中的位置。这些是非常不同的事情。请注意,hasOwnProperty根本不是查看属性的值,而是查看它是否存在。从{1:foo,2:bar}.hasOwnProperty1可以得到相同的结果true

我的问题是,在调用这两种方法时,for循环是否会起作用

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

在复杂性方面,两者是相等的吗


不,一点也不。indexOf将是线性的。hasOwnProperty将低于此值,通常会显著低于此值。即使在最坏的情况下是一个未优化的对象,它也更像是一个哈希字典查找。

因为{}是一个对象而不是数组,数组有索引,对象有属性。var a={1:1,2:2}是一个对象。var b=[1,2]是一个数组。数组是对象的一种类型,而对象不是数组的一种类型。a.hasOwnProperty正在执行键查找,这应该是O1@NickParsons-这将取决于对象是否处于优化模式,它将处于上面的模式,几乎肯定是字典模式,但在任何情况下,它将是次线性的,因此比indexOf更快:-@T.J.Crowder啊,很有趣。谢谢你让我知道:太好了,这是我期待SO的答案。非常感谢你。那么hasOwnProperty如何找到元素呢-@JavascriptLover SKT—如何实现取决于JavaScript引擎实现,甚至在引擎中也可能有所不同。引擎积极优化对象以进行属性检索,因为这是我们使用它们的主要目的。例如,V8为一个对象创建并编译一个类,当您向该对象添加一个属性时,它将子类化。但是有些操作,比如删除,会使它退回到字典模式,基本上是一个散列图。@T.J.Crowder你怎么知道这一切的,你能给我一些来源,让我研究所有这些吗?@SurajJain-我在25年左右的时间里从很多不同的地方学到了。:-很好。当我想知道某些东西是如何工作的时候,我就阅读了。不过,其中使用的语言和惯例有点令人生畏。我在这里读问题和答案。如果你想知道ES2015以后的新东西是如何工作的,我写了一本书:-我个人资料中的D链接。你的书是关于ES6中的新事物的,但目前我想了解深层次的基础知识,在哪里可以找到?