1
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());

如何消除活套以获取密钥

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

需要的输出

 ["name", "age"]
4

3 回答 3

3

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

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

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

于 2013-07-22T09:20:23.173 回答
2

有两种解决方案。您可以使用which 与您的函数执行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/
于 2013-07-22T09:19:56.540 回答
1

hasOwnProperty可以解决问题:

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

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

于 2013-07-22T09:18:49.650 回答