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

Arj*_*jun 11 javascript

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

Koo*_*Inc 16

是的,它区分大小写(所以obj.hasOwnProperty('x') !== obj.hasOwnProperty('X'))您可以扩展Object原型(有些人称之为猴子修补):

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;
}
Run Code Online (Sandbox Code Playgroud)

更多功能:

Object.prototype.hasOwnPropertyCI = function(prop) {
   return Object.keys(this)
          .filter(function (v) {
             return v.toLowerCase() === prop.toLowerCase();
           }).length > 0;
};
Run Code Online (Sandbox Code Playgroud)


Sto*_*ive 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我不会问*为什么*你想这样做,我确信有一个很好的理由...另外,如果你希望实际属性处于正确的大小写,请将“return true”替换为“return prop” (2认同)