ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6 でオブジェクトに特定の属性があるかどうかを判断する方法

es6 でオブジェクトに特定の属性があるかどうかを判断する方法

青灯夜游
青灯夜游オリジナル
2022-04-11 15:15:185039ブラウズ

判定方法: 1. "object.property name! == unknown" ステートメントを使用して判定します。戻り値が true の場合、オブジェクトに特定の属性が存在します。 2. "' ステートメントを使用します。 object" ステートメントのプロパティ名' で、true が返される場合、特定の属性があります。 3. "object.hasOwnProperty('プロパティ名')" ステートメントを使用します。

es6 でオブジェクトに特定の属性があるかどうかを判断する方法

このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

#es6 オブジェクトが特定の属性を持っているかどうかを判断する

方法 1: ポイント (.) 未定義判定

オブジェクトの属性値は、ドットまたは角括弧を使用して取得できることがわかっていますが、その属性がオブジェクトに存在しない場合は、未定義が返されます。このメソッドは、指定されたオブジェクトの独自のプロパティと継承されたプロパティを決定できます。オブジェクト自体に検出されたプロパティがなく、そのプロパティがプロトタイプ チェーン上にある場合は、プロトタイプ チェーン上のプロパティ値が返されます。

// 创建对象
let obj = {
    name: 'Scarlett',
    age: 37
}
console.log(obj.name !== undefined)  // true 自身属性存在
console.log(obj.gender !== undefined)  // false gender属性不存在

// 在原型上添加一个可枚举属性
Object.prototype.nationality = 'America'

// 在obj对象上添加一个不可枚举属性
Object.defineProperty(obj, 'occupation', {
    value: 'actress',
    enumerable: false
})

簡単に言えば、Object.propertyName !== unknown の戻り値を使用して、オブジェクトに特定のプロパティが含まれているかどうかを判断できます。ただし、状況が 1 つあります。つまり、属性名が存在し、属性値が未定義の場合、望ましい結果を返すことができません。

// 新增一个值为undefined的属性
obj.birthday = undefined

console.log(obj.birthday !== undefined)  // false

そうですね、この問題を解決するには in 演算子を使用できます。

メソッド 2: 演算子内

このメソッドは、指定されたオブジェクトの独自の属性および継承された属性に特定の属性が存在するかどうかを判断し、存在する場合は true を返します。 。 in 演算子は、プロトタイプ チェーン上のプロパティを検出することもできます。


'name' in obj  // true 自身属性存在
'occupation' in obj  // true 不可枚举属性存在
'nationality' in obj  // true 继承属性
'birthday' in obj  // true 值为undefined的属性

in 演算子の構文も非常に単純です。スコープと効果はドット (.) または角括弧 ([]) と同じです。違いは、属性の値が であることです。 unfineed も正常に判定できます。

  • 上記 2 つの方法の制限は、自己所有のプロパティとプロトタイプ チェーン上のプロパティを正確に区別できないことです。独自のプロパティが存在するかどうかを確認したい場合は、Object.hasOwnProperty() が必要です。

メソッド 3: Object.hasOwnProperty()

Object.hasOwnProperty() は、指定されたオブジェクト自体に特定の属性が含まれているかどうかを判断するために使用されます。 (継承されていません)、ブール値を返します。

obj.hasOwnProperty('name')  // true 自身属性
obj.hasOwnProperty('occupation')  // true 不可枚举属性
obj.hasOwnProperty('birthday')  // true
obj.hasOwnProperty('nationality')  // false 原型链上继承的属性

このメソッドは、継承された属性をフィルターで除外し、検出された属性が独自の属性である場合に true を返します。

【関連する推奨事項:

JavaScript ビデオ チュートリアル Web フロントエンド ]

以上がes6 でオブジェクトに特定の属性があるかどうかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。