Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка на наличие переменной (https://javascript.ru/forum/misc/57596-proverka-na-nalichie-peremennojj.html)

vuler 11.08.2015 12:43

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

javaQest 11.08.2015 13:02

Цитата:

Сообщение от vuler
существует ли определенная переменная в нем

то есть, в самом, а не во вложенных? Если так, то это очень просто
alert("a" in {a: 1})

vuler 11.08.2015 13:19

Это немного не то, все равно выдаст ошибку. Вариант только такой.
try{
			if (!full_null(this.form.rulers.format[this.name])) 
				this.rulers.format=this.form.rulers.format[this.name];
		}catch(err){
			// console.log(err);
		}

Но опять же это увеличивает размер кода. может покороче есть провека, а то планируется достаточно много подобных операций.

javaQest 11.08.2015 13:33

Цитата:

Сообщение от vuler
elem==""

Короче, хз, чего вам надо, но н всякий случай это уберите, это не входит в
Цитата:

Проверка на полный ноль. отстутсвие или несуществование.
впрочем и undefined тоже туда не входит, не говоря уже об "undefined"(в кавычках)

и используйте строгую проверку. ==/===

javaQest 11.08.2015 13:38

Цитата:

Сообщение от vuler
это увеличивает размер кода

Вам сейчас надо не о размере кода думать, а о том, чтобы освоить основы JS. О размере кода Вам еще не скоро задумываться придется:)

vuler 11.08.2015 13:53

Мы с тобой видимо на разных языках говорим :). Вроде все понятно объяснил, а ты все не в ту степь :)

vuler 11.08.2015 14:03

Я так понял тебя смутила функция 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'){
    и т.д.
 }
}

javaQest 11.08.2015 14:09

vuler,
Хорошо, сначала, по шагам. Определесь, для начала, что ты на самом деле чекаешь, переменную или ее значение. По вопросу, вроде, переменную, а по коду -- значение. Затем продолжим.

javaQest 11.08.2015 14:15

vuler,
Короче, как я понял по коду, тебе нужны значения ключей.

Первая твоя ошибка -- elem=="undefined", пиши, elem===undefined, но при этом ты должен учитывать, что так ты отсутствие элемента не определишь, это вычислиться в true и в случае отсутствия элемента, и в слуачае, если значение элемента undefined.

javaQest 11.08.2015 14:18

Цитата:

Сообщение от vuler
elem==""

это тоже непонятно, что тебе даст, элементу никто не запрещает быть пустой строкой.

Точно также, любой слот может быть выставлен в false, в [], в {} и так далее. Ты точно все еще хоцешь пилить свой код дальше? Ты хоть озвуч цель этой проверки, внятно.


Часовой пояс GMT +3, время: 21:34.