2013-06-28 4 views
0

Если это уже было задано, прежде чем приносим извинения. Я не мог найти его.Как определить, является ли значение поля объектом?

Мне нужно прокрутить список полей в объекте. Я использую:

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

Который работал большой, пока объект preferences_data.person не получил объект в качестве значения одного из полей. Я надеюсь найти способ проверить, является ли свойство самим объектом, а не использовать его, или лучше всего.

+1

Возможно, имеет смысл проверить, является ли значение числом или строкой, и использовать их только. Как 'if (typeof preferences_data.person [property] ===" string "|| typeof preferences_data.person [property] ===" number ") {/ * Ваш код jQuery * /}' – Ian

ответ

5
if (typeof preferences_data.person[property] === "object") 
+3

Остерегайтесь, что 'typeof (null) 'также является" объектом ". – LexLythius

+0

спасибо. Я буду отмечать это как ответ, когда он позволяет мне, как через 10 минут. –

1

как насчет:

(typeof property == "object") 

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

Вы можете использовать TypeOf для этого и проверить, если это объект.

for (var property in preferences_data.person){ 
    if (typeof property !== 'object') { 
     $("div.item form[name=" + property + "]").addClass('active'); 
    } else { 
     //do something else 
    } 
} 
0

Попробуйте использовать typeof preferences_data.person[property] === 'object'

0

Вы можете использовать оператор TypeOf, чтобы проверить свойство является строкой:

for (var property in preferences_data.person){ 
    if (typeof property === "string") { 
     $("div.item form[name=" + property + "]").addClass('active'); 
    } 
} 
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]», «[объект массива]», или «[объект Null]» (среди возможных других). Таким образом, вы можете использовать их и/или !== null для проверки на null.

Также обратите внимание, что символы в значении могут нарушить селектор атрибутов - вы всегда должны указывать значение внутри селектора. Поэтому замените селектор следующим образом:

$('div.item form[name="' + property + '"]') 
+0

Спасибо, это приятно знать. –