delete はオブジェクトの属性を削除することです。たとえば、オブジェクトの場合、
delete obj.key はオブジェクトのキー属性を削除します。これは問題ありません。ただし、オブジェクトのプロトタイプの場合、この属性がオブジェクトにも存在する場合は注目に値します。
var A = function(){};
A.prototype.testMe = true;
var a = new A();
//プロトタイプのプロパティをオーバーライドします
a.testMe = true; 🎜>/ / いくつかのキー コード...
// ....
// この属性を削除します
delete a.testMe;
}
// 2 番目の段落 ---- -- ---------------------
// 他のモジュール内
if(a.testMe){
// いくつかのキーコード。 . .
// ....
}
の 2 番目の段落は、削除された後は存在しないと考えてはいけません。 .testMe 未定義の場合、それは false です。実際、プロトタイプ アクセスを通じてまだ存在しており、これは true です。
注意していなかったら、ここで騙されました。
//Attachment:
プロトタイプチェーンを含む、オブジェクトに特定の属性があるかどうかを検出します:
if ('attrName' in obj)...
オブジェクトに特定の属性があるかどうかを検出します。これはオブジェクト自体に属し、非プロトタイプ チェーン:
obj.hasOwnProperty('attrName')