hasOwnProperty()
方法区分大小写吗?是否有hasOwnProperty
的其他不区分大小写的替代版本?
答案 0 :(得分:16)
是的,它区分大小写(所以obj.hasOwnProperty('x') !== obj.hasOwnProperty('X')
)您可以扩展Object原型(有些人称之为monkey patching):
Object.prototype.hasOwnPropertyCI = function(prop) {
return ( function(t) {
var ret = [];
for (var l in t){
if (t.hasOwnProperty(l)){
ret.push(l.toLowerCase());
}
}
return ret;
} )(this)
.indexOf(prop.toLowerCase()) > -1;
}
更多功能:
Object.prototype.hasOwnPropertyCI = function(prop) {
return Object.keys(this)
.filter(function (v) {
return v.toLowerCase() === prop.toLowerCase();
}).length > 0;
};
答案 1 :(得分:3)
是的,它区分大小写,因为JavaScript区分大小写。
该语言没有内置替代方案,但您可以自己动手:
function hasOwnPropertyCaseInsensitive(obj, property) {
var props = [];
for (var i in obj) if (obj.hasOwnProperty(i)) props.push(i);
var prop;
while (prop = props.pop()) if (prop.toLowerCase() === property.toLowerCase()) return true;
return false;
}
答案 2 :(得分:3)
Object.defineProperty(Object, 'hasOwnPropertyCI', {
enumerable: false,
value: (keyName) => (
Object.keys(this).findIndex(
v => v.toUpperCase() === keyName.toUpperCase()
) > -1
}
});
当keyName存在于被调用的对象中时,这将解析为true
:
var MyObject = { "foo": "bar" };
MyObject.hasOwnPropertyCI("foo");
希望能帮到别人! :d
PS: 就我个人而言,我的实现将上述条件置于IF语句中,因为我不能在我的应用程序中的任何其他地方使用它(此外因为我不是操纵原生原型的忠实粉丝。