hasOwnProperty() はいつ使用する必要がありますか? 質問する

hasOwnProperty() はいつ使用する必要がありますか? 質問する

オブジェクトは他の何かによって変更され、不要なキーが含まれる可能性があるため、オブジェクトをループするときは常に hasOwnProperty を使用する必要があると読みました。

しかし、これは常に必要なのでしょうか? 必要のない状況もあるのでしょうか? ローカル変数にも必要なのでしょうか?

function my(){
  var obj = { ... };
  for(var key in obj){
    if(obj.hasOwnProperty(key)){
      safe
    }
  }
}

余分なものを追加するのは好きではないもし必要がない限り、ループ内で行います。

hasOwnProperty の廃止

この人はもうそれを一切使わないほうがいいと言っています。

ベストアンサー1

Object.hasOwnPropertyプロパティ全体がオブジェクト自体で定義されているか、プロトタイプ チェーンで定義されているかを決定します。

言い換えると、オブジェクト自体以外の場所から取得されるプロパティ (データまたは関数のいずれか) が必要な場合は、いわゆるチェックを実行します。

例えば:

function A() {
   this.x = "I'm an own property";
}

A.prototype.y = "I'm not an own property";

var instance = new A();
var xIsOwnProperty = instance.hasOwnProperty("x"); // true
var yIsOwnProperty = instance.hasOwnProperty("y"); // false

所有プロパティのみが必要な場合は、全体のチェックを回避しますか?

ECMAScript 5.x以降では、Object項目Object.keys与えられたオブジェクトからプロパティを取得する:

var instance = new A();
// This won't contain "y" since it's in the prototype, so
// it's not an "own object property"
var ownPropertyNames = Object.keys(instance);

また、ECMAScript 5.x以降ではArray.prototypeArray.prototype.forEachfor-each ループ流暢に:

Object.keys(instance).forEach(function(ownPropertyName) {
    // This function will be called for each found "own property", and
    // you don't need to do the instance.hasOwnProperty check any more
});

おすすめ記事