我不知道如何使用原型扩展地图对象,希望你能提供帮助。 我有这样的事情:
var map = {'one':1, 'two':2};
我希望有一种方法来检查是否存在密钥:
if (map.containsKey('one')){...}
如何扩展地图对象?
答案 0 :(得分:9)
修改Object.prototype 是危险的,因为it affects all objects and will usually break other libraries you may be using。通常,如果要将方法添加到类字典对象,则应为哈希实例创建一个对象,以继承like the Prototype Hash object。
对于此特定情况,您应该只使用if (key in map)
或if (map.hasOwnProperty(key))
。
答案 1 :(得分:4)
已经有一个运算符来测试对象内是否存在键。
(在JavaScript中,对象实现为地图,因此实际上没有真正的地图。)
if( 'one' in map )
{
alert(map['one']);
}
答案 2 :(得分:1)
这些不是“地图”,而是对象。基于莫里斯的答案,如果你想将它应用于所有对象:
Object.prototype.containsKey = function(key) {
return this.hasOwnProperty(key);
};
答案 3 :(得分:0)
最简单的方法是直接在对象中添加一个函数:
map.containsKey = function(key) {
return this[key] ? true : false;
};
答案 4 :(得分:0)
在Javascript中,你真的不需要这样的方法。
if ( map['one'] ) {
// do something
}
应该这样做
答案 5 :(得分:0)
正如其他人所说的那样,如果你的代码必须与不了解Object.prototype
的人编写的代码一致,那么扩展hasOwnProperty()
可能不是一个好主意。
无论如何,我知道有三种“正确”的方法可以检查房产是否可用:
obj.hasOwnProperty(name)
检查对象中是否存在具有给定名称的属性。
name in obj
还包括通过对象的原型链继承的属性。
typeof obj[name] !== 'undefined'
如果属性存在但已设置为false
,则将另外评估为undefined
。
某些非JS对象(例如IE中的window.external
)可能无法实现hasOwnProperty()
,因此必须使用其他一项检查。