Проверка на наличие переменной
Добрый день. К сожалению не нашел ответ на достаточно простой вопрос, не знаю как сформулировать :).
В общем есть объект с вложенными объектами и массивами, и нам нужно проверить существует ли определенная переменная в нем. Пишу условие 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, время: 21:34. |