Проверка на наличие переменной
Добрый день. К сожалению не нашел ответ на достаточно простой вопрос, не знаю как сформулировать :).
В общем есть объект с вложенными объектами и массивами, и нам нужно проверить существует ли определенная переменная в нем. Пишу условие
function full_null(elem){//Проверка на полный ноль. отстутсвие или несуществование.
if (elem=='undefined' || elem==null || elem==""){
return true;
}else return false;
}
if (full_null(this.form.rulers.format[this.name]))
this.rulers.format=this.form.rulers.format[this.name];
Тут идет проверка на существование в массиве формат, элемента с ключем this.name Но выдается ошибка TypeError: this.form.rulers.format is undefined т.е. сам массив format не был задан. В результате приходится вначале делать проверку на наличие массива - format, а затем уже проверять на наличие в нем this.name. Можно как-то задать проверку в одну строку без двойных условий и try-catch конструкций? |
Цитата:
alert("a" in {a: 1})
|
Это немного не то, все равно выдаст ошибку. Вариант только такой.
try{
if (!full_null(this.form.rulers.format[this.name]))
this.rulers.format=this.form.rulers.format[this.name];
}catch(err){
// console.log(err);
}
Но опять же это увеличивает размер кода. может покороче есть провека, а то планируется достаточно много подобных операций. |
Цитата:
Цитата:
и используйте строгую проверку. ==/=== |
Цитата:
|
Мы с тобой видимо на разных языках говорим :). Вроде все понятно объяснил, а ты все не в ту степь :)
|
Я так понял тебя смутила функция full_null, давай ее уберем.
Этот код работает.
if (typeof this.form.rulers.format !='undefined' ){
if (typeof this.form.rulers.format[this.name] !='undefined'){
this.rulers.format=this.form.rulers.format[this.name];
}
}
Этот нет. (выдает ошибку)
if (typeof this.form.rulers.format[this.name] !='undefined'){
this.rulers.format=this.form.rulers.format[this.name];
}
Не работает потому-что this.form.rulers.format = undefined Мне нужно убрать проверки условий..может быть запись obj1.obj2.obj3.obj4 и т.д. мне делать проверки на существование каждого обекта?
if (typeof obj1 !='undefined'){
if (typeof obj1.obj2 !='undefined'){
и т.д.
}
}
|
vuler,
Хорошо, сначала, по шагам. Определесь, для начала, что ты на самом деле чекаешь, переменную или ее значение. По вопросу, вроде, переменную, а по коду -- значение. Затем продолжим. |
vuler,
Короче, как я понял по коду, тебе нужны значения ключей. Первая твоя ошибка -- elem=="undefined", пиши, elem===undefined, но при этом ты должен учитывать, что так ты отсутствие элемента не определишь, это вычислиться в true и в случае отсутствия элемента, и в слуачае, если значение элемента undefined. |
Цитата:
Точно также, любой слот может быть выставлен в false, в [], в {} и так далее. Ты точно все еще хоцешь пилить свой код дальше? Ты хоть озвуч цель этой проверки, внятно. |
| Часовой пояс GMT +3, время: 02:19. |