javascript - hasOwnProperty(propName) 与 hasOwnProperty("propName")
问题描述
我已经完成了Record Collection的挑战,并有一个可行的解决方案。
我们何时以及为什么在for 中添加引号(""
或''
)?你什么时候用or ?propName
hasOwnProperty(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
.
我从中了解到hasOwnProperty()
:Testing object for Properties。
解决方案
在大多数情况下,您希望使用字符串来检查该属性是否存在于对象上。在不使用引号的情况下,这意味着它必须是一个变量,该变量保存与属性名称相对应的字符串的值 - 它与以与属性相同的方式命名的变量无关。例如,您可能会看到一些类似这样的代码,它们在其中迭代属性并检查属性是否属于对象(示例取自 docs on 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
推荐阅读
- laravel - 调用未定义的关系 - Laravel
- python - Python 值错误。不明白错误或如何修复
- r - 如何在给定概率矩阵的情况下从二项分布中采样
- machine-learning - 这两种 Keras 方法在迁移学习中有什么区别?
- google-cloud-data-fusion - 连接到 Cloud SQL MySQL
- coq - 逻辑:All_In 无法展开嵌套的 forall
- c# - 将多页 tiff 文件转换为多个 tiff 页面
- python - blockmanage() 接受 1 个位置参数,但在将数组提供给函数时给出了 36 个
- python - 如何让我的 Sprite 出现在我的窗口中?
- docker - 502 nginx 后面带有 pgadmin4 的错误网关?