Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему происходит проверка до вызова самой функции? (https://javascript.ru/forum/misc/23858-pochemu-proiskhodit-proverka-do-vyzova-samojj-funkcii.html)

wwwboy 09.12.2011 00:04

Почему происходит проверка до вызова самой функции?
 
Пишу функцию

function isUndefined(obj) {
  return typeof(obj) === "undefined" || obj == null;
});

var b = isUndefined(Obj1);


при несуществующем объекте Obj1 - пишет ошибку до вызова самой функции - "Obj1 не определено"

Как можно вылечить?

devote 09.12.2011 00:26

вы пытаетесь передать несуществующую переменную, конечно выползит ошибка:

function isUndefined(obj) {  
  return typeof(obj) === "undefined" || obj == null;  
};  

var Obj1;
alert( isUndefined(Obj1) );

wwwboy 09.12.2011 01:07

Но в prototype.js все работает же!

function isUndefined(object) {
  return typeof object === "undefined";
}

extend(Object, {
  ...
  isUndefined: isUndefined
});

var b = Object.isUndefined(Obj1) //b => true

wwwboy 09.12.2011 01:50

как осуществить проверку на undefined в функции а не инлайном typeof Obj === 'undefined' ?

Маэстро 09.12.2011 02:50

Цитата:

Сообщение от wwwboy (Сообщение 141523)
как осуществить проверку на undefined в функции а не инлайном typeof Obj === 'undefined' ?

Понимаете, в Вашем случае переменная Obj1 непонятно откуда берётся. То ли она глобальная, то ли локальная... это зависит от области видимости. Не стоит для этого создавать отдельную функцию, т.к. ошибка возникнет на этапе вызова функции при передаче несуществующей переменной. Проще так:
if (window.Obj1) alert('true'); else alert('false');
данная проверка проверит Obj1 сразу на всё (undefined, null, false) и не выдаст исключения

wwwboy 09.12.2011 03:37

Цитата:

Сообщение от Маэстро (Сообщение 141526)
Понимаете, в Вашем случае переменная Obj1 непонятно откуда берётся. То ли она глобальная, то ли локальная... это зависит от области видимости. Не стоит для этого создавать отдельную функцию, т.к. ошибка возникнет на этапе вызова функции при передаче несуществующей переменной. Проще так:
if (window.Obj1) alert('true'); else alert('false');
данная проверка проверит Obj1 сразу на всё (undefined, null, false) и не выдаст исключения

Спасибо за разъяснение!


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