首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript setattr或setOwnProperty

Javascript setattr或setOwnProperty
EN

Stack Overflow用户
提问于 2011-08-03 11:14:21
回答 5查看 2.2K关注 0票数 3

我有一个简单的数组:

代码语言:javascript
复制
var arr = ['has_cats', 'has_dogs'];

和一个对象:

代码语言:javascript
复制
var obj = new Object();

我想从数组中设置对象属性:

代码语言:javascript
复制
for( i=0; i < arr.length; i++ ) {
        if(!arr.hasOwnProperty(arr[i])) {
                // set the object property
        }
}

在循环之后,我应该能够调用obj.has_cats,但是我似乎找不到一种合适的方法在javascript中这样做。在python中,我会调用setattr(obj,arr[i], value)。我认为如果对象有一个hasOwnProperty,那么它们也应该有一个getOwnProperty和一个setOwnProperty

有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-03 11:39:30

“我认为如果对象有一个hasOwnProperty,那么它们也应该有一个getOwnProperty和一个setOwnProperty

hasOwnProperty()函数告诉您命名的属性是否作为对象的直接属性存在,而不是从对象的原型链中的某个位置继承的属性。像if (someProperty in someObject) {}一样使用的in运算符将告诉您对象是否在原型链中的任何位置具有该属性。

您不需要相应的setOwnProperty()函数,因为您只需说:

代码语言:javascript
复制
someObject[someProperty] = someValue;

我猜,如果你想要一个只在指定的属性是直接属性时返回值的函数,那么相应的getOwnProperty()函数的想法是有意义的,但是没有任何方法来表明没有找到指定的属性,因为如果找到该属性,null,undefined,false等都是合法的潜在值。因此,要实现这一点,您需要使用if (hasOwnProperty())分两步完成。

但听起来这不是你想要做的。如果我没理解错的话,您只是想要一些方法来设置一个属性,其中属性名在一个变量中(在您的例子中,是一个数组元素)。您没有明确表示希望将哪些值与这些属性相关联,所以我只使用true

代码语言:javascript
复制
var arr = ['has_cats', 'has_dogs'];

var obj = {}; // note {} is generally preferred to new Object();

for(var i=0; i < arr.length; i++ ) {
  // if the property doesn't already exist directly on
  // the object
  if(!obj.hasOwnProperty(arr[i])) {
     // set the object property
     obj[arr[i]] = true;
  }
}

// can access with bracket notation
alert(obj["has_cats"]);

// can access with dot notation
alert(obj.has_cats);
票数 3
EN

Stack Overflow用户

发布于 2011-08-03 11:19:29

您可以通过以下方式设置该值:

代码语言:javascript
复制
for(i = 0; i < arr.length; i++ ) {
        if(!obj.hasOwnProperty(arr[i])) {
                obj[arr[i]] = 'value';
        }
}
票数 2
EN

Stack Overflow用户

发布于 2011-08-03 11:43:49

无论是getOwnProperty还是setOwnProperty都不会增加任何价值:

下面始终设置从x求值的对象的属性。因此,setOwnProperty只不过是一个属性赋值。

代码语言:javascript
复制
x[prop] = v

同样,使用hasOwnProperty和属性存在的组合,可以派生(并取代) getOwnProperty

代码语言:javascript
复制
if (x.hasOwnProperty(prop)) {
   // x has prop
   // x[prop] may evaluate to undefined
} else if (prop in x) {
   // prop resolved through [[prototype]] chain
   // x[prop] may evaluate to undefined
} else {
   // property prop not set
   // x[prop] will evaluate to undefined
}

祝你编码愉快。

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

https://stackoverflow.com/questions/6921258

复制
相关文章

相似问题

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