JavaScript中的hasOwnProperty方法区分大小写吗?

时间:2011-04-29 13:47:03

标签: javascript

hasOwnProperty()方法区分大小写吗?是否有hasOwnProperty的其他不区分大小写的替代版本?

3 个答案:

答案 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语句中,因为我不能在我的应用程序中的任何其他地方使用它(此外因为我不是操纵原生原型的忠实粉丝。