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

javaQest 11.08.2015 14:33

В общем, если я тебя правильно понял, тебе нужна вот такая вот параша
check=function(object, name){
  return name in object&&object[name]!== undefined&&object[name]!==""
}

object={real: {}, emptyString: ""}

alert([
 check(object, "emptyString"), 
 check(object, "undef"),
 check(object, "real")
]
)

vuler 11.08.2015 14:48

Слушай я уже до самого простого упростил вопрос
Слушай. Я же уже до простого упростил вопрос, забудь то что выше, если не понятно. Объясни следующее.
//Как получается
If (typeof obj1 !=’undefined’){
	If (typeof obj1.obj2 !=’undefined’){
		If (typeof obj1.obj2.obj3 !=’undefined’){
			var value= obj1.obj2.obj3[0]
                  }
          }
}
//Нужно что-то вроде этого, но без остановки скрипта по ошибкам вроде:
//obj1 - undefined
//obj1.obj2 - undefinded

If (typeof obj1.obj2.obj3 !=’undefined’){
	var value= obj1.obj2.obj3[0]
}


Что касается full_null эта функция пользовательская, мне нужно чтобы значение не было пустым

javaQest 11.08.2015 14:54

вот так попробуй
if(window.obj1&&obj1.obj2&&obj1.obj2.obj3&&obj1.obj2.obj3!==undefined) somecode

javaQest 11.08.2015 15:01

vuler,
А вообще, тебе проще оборачивать в try. Но что-то у тебя явно там не так. В нормальном коде едва ли такое может понадобиться.

KosBeg 11.08.2015 15:42

для начала скажите чему равен
console.log(this.form.rulers.format)
:)
я так понял у вас ошибка в "this", попробуйте использувать напрямую нужную вам переменную)

KosBeg 11.08.2015 15:50

Цитата:

Сообщение от vuler
В результате приходится вначале делать проверку на наличие массива - format, а затем уже проверять на наличие в нем this.name. Можно как-то задать проверку в одну строку без двойных условий и try-catch конструкций?

аа, вот оно чё)
нет, тут наверное никак, если массива нету выдаст ошибку(так и есть)
можно попробывать так
function full_null(elem){//Проверка на полный ноль. отстутсвие или несуществование.
	if (elem=='undefined' || elem==null || elem==""){
		return true;
	}else return false;
}
if (full_null(this.form.rulers.format) && full_null(this.form.rulers.format[this.name]))
			this.rulers.format=this.form.rulers.format[this.name];

javaQest 11.08.2015 15:52

Цитата:

Сообщение от KosBeg
нет, тут наверное никак, если массива нету выдаст ошибку(так и есть)

http://javascript.ru/forum/misc/5759...tml#post383607

vuler 11.08.2015 15:58

Цитата:

Сообщение от KosBeg (Сообщение 383619)
для начала скажите чему равен
console.log(this.form.rulers.format)
:)
я так понял у вас ошибка в "this", попробуйте использувать напрямую нужную вам переменную)

Да нет тут все в порядке с this, просто думал в js есть какае-нибудь дельные функции для проверок :).
В php все проще.
if ($rrrr->ssss->form_rulersq['sss']) {
echo 'тут';
}else{
echo 'там';
}
Например этот код пройдет легко. php плевать на то что объекта rrrr не существует, что в нем не существует объект ssss, что в объекте ssss нет массива form_rulersq и т.д.
просто выдаст условие else и продолжит работу. А js начинает проверять существование всей этой цепочки

javaQest 11.08.2015 16:36

Цитата:

Сообщение от vuler
А js начинает проверять существование всей этой цепочки

да ничо он не проверяет. У тебя ошибка из-за доступа к свойству undefined, которого не существует.
undefined.foo

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

vuler 11.08.2015 16:53

Цитата:

Сообщение от javaQest (Сообщение 383636)
да ничо он не проверяет. У тебя ошибка из-за доступа к свойству undefined, которого не существует.
undefined.foo

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

А вот на счет этого я бы поспорил, что лучше :). Для тебя лучше на Сишке все переменные заранее объявлять, прежде чем с ними что-то делать? И ловить ошибки каждый раз, если ты их не объявил. Или лучше объявлять их динамически, кода понадобятся. Тут можно спорить долго конечно. Везде свои плюсы и минусы. Согласен, что ошибки из-за неверного написания переменных порой заставляют потратить время на их поиск.


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