首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hasOwnProperty(propName)与hasOwnProperty("propName")

hasOwnProperty(propName)与hasOwnProperty("propName")
EN

Stack Overflow用户
提问于 2020-05-21 05:59:59
回答 1查看 53关注 0票数 1

我已经在Record Collection解决了这一挑战,并有了一个可行的解决方案。

我们何时以及为什么要在hasOwnProperty(propName)propName中添加报价(""'')?什么时候使用hasOwnProperty(propName)hasOwnProperty("propName")

以下是我的实用解决方案:

代码语言:javascript
复制
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()的。

EN

回答 1

Stack Overflow用户

发布于 2020-05-21 06:03:44

在大多数情况下,您希望使用字符串来检查对象上是否存在该属性。在不使用引号的情况下,这意味着它必须是一个保存与属性名称对应的字符串的值的变量-它与变量的命名方式与属性无关。例如,您可能会看到这样的代码,它们遍历属性并检查属性是否属于对象(例如取自Object.prototype.hasOwnProperty上的文档):

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61923679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档