在从对象中提取键时,object具有额外的属性

时间:2013-07-22 09:15:21

标签: javascript

Object.prototype.looper = function() {
  var result = [];
  for (var property in this)
    result.push(property);
  return result;
};

var test = {name: "tab", age: 5};
console.log(test.looper());

如何消除looper以获得密钥

["name", "age", "looper", looper: function]

需要输出

 ["name", "age"]

3 个答案:

答案 0 :(得分:3)

您可以使用Object.keys方法。这只会给你可枚举的键,所以你不会得到looper键。

// Enumerable keys as an array
Object.keys( objectName );

Object.keys方法包含在最新的浏览器中,如果不存在,您可以将其添加到旧浏览器中,如链接文章中所述。

答案 1 :(得分:2)

有两种解决方案。您可以使用Object.keys来执行与looper函数相同的操作:

var test = {name: "tab", age: 5};
console.log(Object.keys(test));

第二种方法是向hasOwnProperty添加额外的looper支票:

Object.prototype.looper = function() {
  var result = [];
  for (var property in this)
    if (this.hasOwnProperty(property))
      result.push(property);
  return result;
};

var test = {name: "tab", age: 5};
console.log(test.looper());

就这么简单。观看演示:

  1. http://jsfiddle.net/aaditmshah/bhZbk/
  2. http://jsfiddle.net/aaditmshah/bhZbk/1/

答案 2 :(得分:1)

hasOwnProperty可以解决问题:

for (var property in this) {
    if (this.hasOwnProperty(property)) {
        result.push(property);
    }
}

for..in迭代原型链中的所有属性,因此建议在迭代对象的属性时始终使用hasOwnProperty()检查,尤其是在使用某些库时。这也是一个原因,为什么for..in不适合迭代数组。