Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2015, 12:43
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Проверка на наличие переменной
Добрый день. К сожалению не нашел ответ на достаточно простой вопрос, не знаю как сформулировать .
В общем есть объект с вложенными объектами и массивами, и нам нужно проверить существует ли определенная переменная в нем.
Пишу условие
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 конструкций?
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2015, 13:02
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

Сообщение от vuler
существует ли определенная переменная в нем
то есть, в самом, а не во вложенных? Если так, то это очень просто
alert("a" in {a: 1})
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2015, 13:19
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

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

Но опять же это увеличивает размер кода. может покороче есть провека, а то планируется достаточно много подобных операций.
Ответить с цитированием
  #4 (permalink)  
Старый 11.08.2015, 13:33
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

Сообщение от vuler
elem==""
Короче, хз, чего вам надо, но н всякий случай это уберите, это не входит в
Цитата:
Проверка на полный ноль. отстутсвие или несуществование.
впрочем и undefined тоже туда не входит, не говоря уже об "undefined"(в кавычках)

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

Последний раз редактировалось javaQest, 11.08.2015 в 13:36.
Ответить с цитированием
  #5 (permalink)  
Старый 11.08.2015, 13:38
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

Сообщение от vuler
это увеличивает размер кода
Вам сейчас надо не о размере кода думать, а о том, чтобы освоить основы JS. О размере кода Вам еще не скоро задумываться придется
Ответить с цитированием
  #6 (permalink)  
Старый 11.08.2015, 13:53
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Мы с тобой видимо на разных языках говорим . Вроде все понятно объяснил, а ты все не в ту степь
Ответить с цитированием
  #7 (permalink)  
Старый 11.08.2015, 14:03
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Я так понял тебя смутила функция 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'){
    и т.д.
 }
}
Ответить с цитированием
  #8 (permalink)  
Старый 11.08.2015, 14:09
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

vuler,
Хорошо, сначала, по шагам. Определесь, для начала, что ты на самом деле чекаешь, переменную или ее значение. По вопросу, вроде, переменную, а по коду -- значение. Затем продолжим.
Ответить с цитированием
  #9 (permalink)  
Старый 11.08.2015, 14:15
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

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

Первая твоя ошибка -- elem=="undefined", пиши, elem===undefined, но при этом ты должен учитывать, что так ты отсутствие элемента не определишь, это вычислиться в true и в случае отсутствия элемента, и в слуачае, если значение элемента undefined.
Ответить с цитированием
  #10 (permalink)  
Старый 11.08.2015, 14:18
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка присвоения значений переменной через $.ajax lekba Events/DOM/Window 6 08.07.2013 17:08
Предполагается наличие ';' в IE7- FINoM (X)HTML/CSS 5 25.08.2012 16:05
Проверка на наличие значения Viper jQuery 4 07.04.2010 20:26
проверка на наличие определенных символов arbelon Работа 5 15.05.2009 01:41
Проверка текста на наличие в нем букв zoibana Общие вопросы Javascript 1 03.02.2009 15:48