我已经在Record Collection解决了这一挑战,并有了一个可行的解决方案。
我们何时以及为什么要在hasOwnProperty(propName)的propName中添加报价(""或'')?什么时候使用hasOwnProperty(propName)或hasOwnProperty("propName")?
以下是我的实用解决方案:
function updateRecords(id, prop, value) {
if (prop != "tracks" && value != "") {
collection[id][prop] = value;
}
else if (prop === "tracks" && collection[id].hasOwnProperty("tracks") === false) {
collection[id].tracks = [];
collection[id].tracks.push(value);
}
else if (prop ==="tracks" && value != ""){
collection[id].tracks.push(value);
}
else if (value === "") {
delete collection[id][prop];
}
return collection;
}但是,如果将hasOwnProperty("tracks")更改为hasOwnProperty(tracks),代码将停止工作。这让我感到困惑,因为我看到的唯一一个hasOwnProperty(propName)示例没有使用引号,如果在propName周围使用引号,则会失败。
我是从Testing object for Properties了解到hasOwnProperty()的。
发布于 2020-05-21 06:03:44
在大多数情况下,您希望使用字符串来检查对象上是否存在该属性。在不使用引号的情况下,这意味着它必须是一个保存与属性名称对应的字符串的值的变量-它与变量的命名方式与属性无关。例如,您可能会看到这样的代码,它们遍历属性并检查属性是否属于对象(例如取自Object.prototype.hasOwnProperty上的文档):
var buz = {
fog: 'stack'
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) { // here, name holds the value of the property
console.log('this is fog (' +
name + ') for sure. Value: ' + buz[name]);
}
else {
console.log(name); // toString or something else
}
}
正如@Gavin提到的,所显示的示例只是试图告诉您,您可以将属性的名称作为字符串传递,而不是propname
https://stackoverflow.com/questions/61923679
复制相似问题