TestDome.comで作業していて、この質問に遭遇しました。
オブジェクトとプロパティ名を受け取り、次のことを行うremoveProperty関数を実装します。
オブジェクトobjにプロパティpropがある場合、関数はオブジェクトからプロパティを削除し、trueを返します。それ以外の場合はすべてfalseを返します。
私の解決策はこれでした:
function removeProperty(obj, prop) {
if (obj[prop]) {
delete obj[prop];
return true;
} else {
return false;
}
}
テストによると、これは機能せず、解決策は次のとおりです。
function removeProperty(obj, prop) {
if (prop in obj) {
delete obj[prop];
return true;
} else {
return false;
}
}
私の一生の間、私の解決策が間違っている理由を理解することはできません。
編集:さらなる例。
const a = { b: 'c'};
if(a['b']) {console.log(true);} //true
if('b' in a) {console.log(true);} //true
違いは次のとおりです。
obj = {
prop: 1
};
// retrieves the property from the object
console.log(obj['prop']); // 1
// checks if prop is in obj object
console.log('prop' in obj); // true
ifステートメントの場合、両方ともtrueと評価されます。ただし、から取得した値がブロックにobj['prop']
強制変換されfalse
た場合、if
実行されません。例えば:
obj = {
prop: 0
};
// 0 convert to false so
if (obj['prop']) {
console.log('executed 1');
}
// prop is a property of obj so
// 'prop' in obj will evaluate to true
if ('prop' in obj) {
console.log('executed 2');
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加