- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var yourObjects = [
{ object: {obj1:"aa"}, direction: 'top' },
{ object: "obj2", direction: 'left' },
{ object: "obj3", direction: 'bottom' }
];
for (var i in yourObjects) { alert(i); }
对此进行了长时间的讨论。使用 for in
迭代一个对象返回对象的所有属性和方法,所以通常 .hasOwnProperty()应该使用方法。但是当我们迭代一个数组时,实际上 for in
会迭代数组的索引(如果是关联数组,则为键)。我在我拥有的所有浏览器中都尝试过。但是当在 jsfiddle 中尝试时......它不一样......返回数组具有的所有方法。
所以我的问题是:使用 for in
迭代数组是否安全?
在您的浏览器和 jsfiddle 中尝试这段代码,然后告诉我您的想法。
最佳答案
不在数组上使用 for-in
的原因不止一个。
请记住,在 JavaScript 中,数组只是对象的一种类型,因此对数组执行 for-in
与对普通对象执行 for-in
没有什么不同对象。
在您的 jsFiddle 中,您可能在左侧选择了一个库来扩充 Array.prototype
,这将是这些方法的来源。
但还有另一个原因。 for-in
不保证枚举属性的顺序。因为没有约束,它可以乱序枚举您的索引,并且完全符合 ECMAScript。
此外,还有类似数组的集合,例如 NodeLists,它们也不应该使用 for-in
,因为它们包含除了 DOM 元素之外还可以枚举的默认属性。
一个简单的事实是,在 JavaScript 中,for-in
不是基于索引的枚举的合适工具。
对于对象,只有在有特定需要时才需要使用 hasOwnProperty
。
有人建议它必须用在所有对象上。那是一种极度偏执的心态。该方法是一个 guard ,应该在有意义的狭窄情况下使用。
大多数时候使用它没有任何意义,只要您遵守良好的编程习惯即可。这包括不在 Object.prototype
上放置可枚举属性。对编程环境的要求是简单合理的。
它确实有意义的时间是当您枚举从自定义构造函数创建的对象时,该构造函数的 .prototype
扩展了可枚举属性。在这种情况下,它是一个合适的守卫。
在普通对象上使用它是大材小用,而更合理的方法是对您的环境不改变 Object.prototype
的简单要求。
关于javascript - for (var i in yourObjects) { ... } 和 .hasOwnProperty() ... 讨论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594277/
对版主的澄清由于一些版主在扫描问题时速度有点快,我必须强调我不是在问为什么要使用 Object.prototype.hasOwnProperty.call 而不是 myObject.hasOwnPro
代码一: obj.hasOwnProperty(prop); 代码二: const hasOwnProperty = Object.prototype; hasOwnProperty.call(obj
这个问题在这里已经有了答案: Why use Object.prototype.hasOwnProperty.call(myObj, prop) instead of myObj.hasOwnPro
也许这是一个新手问题,但我找不到或想不出解释。 启动 Node.js 控制台,然后: > global.hasOwnProperty === hasOwnProperty true 那为什么 > gl
在eslint规则中guard-for-in ,直接使用for in是不正确的。好的做法是 for (key in foo) { if (Object.prototype.hasOwnProp
如果我理解正确的话,JavaScript 中的每个对象都继承自 Object 原型(prototype),这意味着 JavaScript 中的每个对象都可以通过其原型(prototype)链访问 ha
我正在尝试让我的某些类型具有某种多重“继承”,如下所示: UIControls.ClickableMesh.prototype = Object.create(THREE.Mesh.prototype
我试图发现一个对象是否具有某些属性并且我在使用 hasOwnProperty 方法时遇到了问题。 我在数组上使用该方法(我知道文档说明了一个字符串)。 以下行返回 true: { "a": 1, "b
谁能解释一下空对象上调用的 hasOwnProperty 的作用?为什么要使用它? __hasProp = {}.hasOwnProperty 我在开始使用 coffescript 进行开发时发现了这
我想使用ES6代理来捕获以下常见代码: for (let key in trapped) { if (!Object.prototype.hasOwnProperty.call(obj, ke
使用 angularjs 和 firebase 编写一个函数,该函数应该检查是否可以在数据库中找到 currentUser。目前“attendings”属性仅包含一个用户,即“Peter Pan” 服
我有一个非常简单的问题。访问对象的属性(例如object[property])和属性的数量是否有任何性能关系?是否存在一些内部循环或其他问题,关于 hasOwnProperty - 任何循环或只是像
我试图理解为什么当我调用下面的函数时结果是“否”,因为属性 c 应该存在。有谁知道为什么?谢谢!!! var letters = function() { this.a = 5; th
在 Javascript 中查找散列中的所有值我看到了以下代码: var myHash = {}; myHash['one'] = 1; myHash['two'] = 2; for (var key
我有以下数据: trace = { "name":"foo", "dataref": { "xdata":"n", "ydata":"m" } }; 我想检查对象是否具有
通过某些值,hasOwnProperty调用将引发错误。 让我们检查以下代码 null.hasOwnProperty('bar') //error undefined.hasOwnProperty('
为什么是真的?对象中的方法foo怎么写? Object.prototype.foo = function(obj) { for(var i in obj) this[i] = obj[i];
这个问题在这里已经有了答案: JavaScript object detection: dot syntax versus 'in' keyword (5 个答案) 关闭 7 年前。 假设有一个对象
问题陈述: 如果对象具有与 JavaScript 预定义的 方法 相同的 property 名称。它无法执行并给出以下错误。 Uncaught TypeError: obj.hasOwnPropert
为什么此函数返回“No Contact”而不是“Akira”? function lookUpProfile(firstName, prop){ for(i=0;i
我是一名优秀的程序员,十分优秀!