gpt4 book ai didi

Javascript:原型(prototype) x defineProperty x 还有什么

转载 作者:行者123 更新时间:2023-11-29 17:14:22 26 4
gpt4 key购买 nike

我有一些小但有用的额外方法用于 JS 核心对象,如数组:

Array.prototype.indexOfObject(属性, 值)

此方法返回一个对象在(对象的)数组中的索引,其中 property==value,对我来说简单而高效。

但是,当我枚举任何数组时,该方法就会出现,所以每次我都必须这样做:

for(var i in MyArray){
if(typeof(MyArray[i])=="typeneeded"){
// do something
}
}

据我所知,defineProperty 是一个不可枚举的方法,所以当所有浏览器都接受它时,它会解决我的问题。顺便问一下,使用 defineProperty 已经安全了吗? IE9 运行良好?其它浏览器?有第三种方法吗?

最佳答案

周围有一些 ECMAScript 兼容性矩阵:kangax's仅适用于 ES5,Thomas Lahn's将告诉您各种 ECMAScript 实现的哪些版本支持哪些功能。

“第三种方法”是使用 hasOwnProperty 测试,它适用于所有浏览器,并且在您无法完全控制的任何环境中都是一个好主意:

for (var p in obj) {

if (obj.hasOwnProperty(p)) {

// p is an own property of obj
// do stuff with obj[p]
}
}

您还可以使用 Object.keys ,它也只返回自己的属性,但支持可能少于 defineProperty

您还应注意,for..in 不一定以任何特定顺序返回属性,并且可以显示为在不同浏览器中以不同顺序返回它们。因此,仅将它与访问成员的顺序不重要的数组一起使用。

附言。您也可以使用 propertyIsEnumerable,因为它只对对象本身的属性返回 true:

if (obj.propertyIsEnumerable(p)) {

这用于解决早期 Safari 中的错误,但不应再使用该版本。

顺便说一句,在:

> typeof(MyArray[i])

不需要括号,typeof 是一个运算符。另外,检查 Type属性的属性不会告诉您它是否是对象自己的属性,或者即使它存在(尽管在这种情况下它确实存在,因为它来自 for..in)。 p>

关于Javascript:原型(prototype) x defineProperty x 还有什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com