我正在通过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
答案 0 :(得分:1)
区别如下:
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');
}
答案 1 :(得分:0)
假设您有一个对象
const a = {apple: 0}
在这种情况下,a['apple']
是虚假的,而"apple" in a
则是真实的。
因此,如果要删除某些密钥,只需直接删除密钥。我相信您甚至不需要在删除它之前对其进行检查。