我正在研究 TestDome.com 并遇到了这个问题。
实现 removeProperty 函数,该函数接受一个对象和 属性名称,并执行以下操作:
如果对象 obj 具有属性属性 prop,则该函数将删除 属性并返回 true;在所有其他情况下,它 返回假。
我的解决方案是这样的:
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');
}
假设你有一个对象
const a = {apple: 0}
在这种情况下,a['apple']
是假的,而"apple" in a
是真实的。
因此,如果要删除某些密钥,只需直接删除该密钥即可。我相信您甚至不需要在删除它之前检查它。