我不知道如何用原型扩展地图对象,希望您能提供帮助。我有这样的事情:
var map = {'one':1, 'two':2};
我想有一种方法来检查密钥是否存在:
if (map.containsKey('one')){...}
我将如何扩展地图对象?
我不知道如何用原型扩展地图对象,希望您能提供帮助。我有这样的事情:
var map = {'one':1, 'two':2};
我想有一种方法来检查密钥是否存在:
if (map.containsKey('one')){...}
我将如何扩展地图对象?
修改 Object.prototype 很危险,因为它会影响所有对象,并且通常会破坏您可能正在使用的其他库。一般来说,如果你想为类字典对象添加方法,你应该为你的哈希实例创建一个对象来继承,比如 Prototype Hash object。
对于这个特定的实例,你真的应该只使用if (key in map)
or if (map.hasOwnProperty(key))
。
已经有一个运算符来测试对象内部是否存在键。
(在 JavaScript 中,对象被实现为地图,所以实际上没有真正的地图。)
if( 'one' in map )
{
alert(map['one']);
}
这些不是“地图”,它们是对象。基于莫里斯的回答,如果您希望这适用于所有对象:
Object.prototype.containsKey = function(key) {
return this.hasOwnProperty(key);
};
最简单的方法是直接在对象中添加一个函数:
map.containsKey = function(key) {
return this[key] ? true : false;
};
在 Javascript 中,你真的不需要这样的方法。
if ( map['one'] ) {
// do something
}
应该这样做
正如其他人所说,Object.prototype
如果您的代码必须与不了解hasOwnProperty()
.
无论如何,我知道有三种“正确”的方法来检查属性是否可用:
obj.hasOwnProperty(name)
检查对象中是否存在具有给定名称的属性。
name in obj
还包括通过对象的原型链继承的属性。
typeof obj[name] !== 'undefined'
false
如果该属性存在但已设置为 ,将另外评估undefined
。
一些非 JS 对象(例如window.external
在 IE 中)可能无法实现hasOwnProperty()
,因此必须使用其他检查之一。