0

如果在我道歉之前已经问过这个问题。我找不到它。

我需要遍历对象中的字段列表。我在用着:

for (var property in preferences_data.person){
    $("div.item form[name=" + property + "]").addClass('active');   
}

在preferences_data.person 对象获得一个对象作为其中一个字段的值之前,这非常有效。我希望找到一种方法来检查属性是否是对象本身而不使用它们,或者完全是更好的方法。

4

6 回答 6

5
if (typeof preferences_data.person[property] === "object")
于 2013-06-28T20:42:11.323 回答
2

您可以为此使用 typeof 并检查它是否是一个对象。

for (var property in preferences_data.person){
   if (typeof property !== 'object') {
      $("div.item form[name=" + property + "]").addClass('active');
   } else {
      //do something else
   }  
}
于 2013-06-28T20:43:30.300 回答
2

您可以检查该值是否为字符串/数字,而不是检查可以是对象文字、数组null并将生成的对象,例如:

for (var property in preferences_data.person) {
    var cur = preferences_data.person[property];
    if (typeof cur === "string" || typeof cur === "number") {
        $("div.item form[name=" + property + "]").addClass('active');
    }
}

当然,如果您仍然想检查对象,您可以过滤掉数组并null使用:

var theType = Object.prototype.toString.call(obj);

theType然后将是“[object Object]”、“[object Array]”或“[object Null]”(可能还有其他)。所以你可以使用这些,和/或!== null检查null.

另请注意,值中的字符可能会破坏属性选择器 - 您应该始终引用选择器的值。所以将选择器更改为:

$('div.item form[name="' + property + '"]')
于 2013-06-28T20:48:54.820 回答
1

怎么样:

(typeof property == "object")

for (var property in preferences_data.person){
     if(typeof(property) != "object")    {
          $("div.item form[name=" + property + "]").addClass('active');   
     }
}
于 2013-06-28T20:42:57.217 回答
0

Try using typeof preferences_data.person[property] === 'object'

于 2013-06-28T20:45:26.527 回答
0

You can use the typeof operator to check the property is a string:

 for (var property in preferences_data.person){
    if (typeof property === "string") {
        $("div.item form[name=" + property + "]").addClass('active');
    }
 }
于 2013-06-28T20:45:47.100 回答