インスタンス化されたオブジェクト自身のプロパティを取得します。

hasOwnPropertyをは()メソッドは、オブジェクトことを示すブール値を返し、それ自体が属性が指定された属性を有する(すなわち、指定されたキーが存在するか否か)

このメソッドはに属しObject、すべてのオブジェクトは、オブジェクトのオブジェクトインスタンス「継承」しているので、オブジェクト、そのオブジェクトのほぼすべてのインスタンスがこのメソッドを使用することができます。

文法

obj.hasOwnProperty(prop)

パラメータ

返却値

オブジェクトは、指定されたプロパティがあるかどうかを判断するために使用しますBoolean

o = new Object();
o.prop = 'exists';

function changeO() {        // 改变对象自身属性
  o.newprop = o.prop;
  delete o.prop;           
}

o.hasOwnProperty('prop');   // 返回 true
changeO();
o.hasOwnProperty('prop');   // 返回 false
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // 返回 true       hasOwnProperty只能获得自身属性,不能获得继承属性
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false

Object.getOwnPropertyNames()メソッドは、が所有する指定されたオブジェクトを返し、それ自体(含まないが、属性名シンボルの属性値を列挙していない)からなるname属性を属性アレイ

文法

Object.getOwnPropertyNames(obj)

パラメータ

  • obj

    オブジェクト自体ではなく列挙列挙属性名が返されます。

返却値

文字列配列は、指定されたオブジェクト上に見出さ財産を所有する対応します。

var arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]

// 类数组对象
var obj = { 0: "a", 1: "b", 2: "c"};
console.log(Object.getOwnPropertyNames(obj).sort()); // ["0", "1", "2"]

// 使用Array.forEach输出属性名和属性值
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
  console.log(val + " -> " + obj[val]);
});
// 输出
// 0 -> a
// 1 -> b
// 2 -> c

//不可枚举属性
var my_obj = Object.create({}, {
  getFoo: {
    value: function() { return this.foo; },
    enumerable: false
  }
});
my_obj.foo = 1;

console.log(Object.getOwnPropertyNames(my_obj).sort()); // ["foo", "getFoo"]

列挙されたプロパティを取得するだけでなく、

次の例では、使用するArray.prototype.filter()(プロパティ名の配列からすべての利用可能な、方法をObject.getOwnPropertyNames()取得方法)列挙属性(使用して除去することができObject.keys()得る方法を)、プロパティの残りの属性は、列挙ではありません。

var target = myObject;
var enum_and_nonenum = Object.getOwnPropertyNames(target);
var enum_only = Object.keys(target);
var nonenum_only = enum_and_nonenum.filter(function(key) {
    var indexInEnum = enum_only.indexOf(key);
    if (indexInEnum == -1) {
        // 没有发现在enum_only健集中意味着这个健是不可枚举的,
        // 因此返回true 以便让它保持在过滤结果中
        return true;
    } else {
        return false;
    }
});

console.log(nonenum_only);
注:Array.filter(filt_func)方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

アルゴリズム

おすすめ

転載: www.cnblogs.com/danew/p/11511952.html