Javascript isset функция - PullRequest
       0

Javascript isset функция

1 голос
/ 14 февраля 2012

Я создал функцию isset , чтобы проверить, определена ли переменная и не равна ли она нулю.Вот мой код:

isset = function(a) {
    if ((typeof (a) === 'undefined') || (a === null))
        return false;
    else
        return true;
};
var a = [];

// Test 1
alert(isset(a['not']); // Alerts FALSE -> works OK
// Test 2
alert(isset(a['not']['existent'])); // Error: Cannot read property 'existent' of undefined

Любое предложение, чтобы моя функция работала для теста 2?Спасибо.

Ответы [ 4 ]

4 голосов
/ 14 февраля 2012

Вы пытаетесь проверить свойство неопределенного объекта.Это не имеет никакого смысла.Вы могли бы написать так:

alert(isset(a['not']) && isset(a['not']['existent']));
3 голосов
/ 14 февраля 2012

это не сработает, и вы не можете заставить его работать.что происходит так: движок js пытается оценить ['not'] и получить "undefined", затем он пытается оценить свойство "существующие" неопределенного, и вы получите эту ошибку.все это происходит до вызова вашей функции ...

то, что вы можете сделать, выглядит примерно так:

var isset = function(obj, props) {
    if ((typeof (obj) === 'undefined') || (obj === null))
        return false;
    else if (props && props.length > 0)
        return isset(obj[props.shift()], props);
    else
        return true;
};

тогда вы вызываете это так:

var a = [];

// Test 1
alert(isset(a, ['not']);
// Test 2
alert(isset(a, ['not', 'existent']));

(** это просто псевдокод, вам может понадобиться немного его изменить, чтобы он действительно работал)

1 голос
/ 14 февраля 2012

Тест 2 не будет работать, потому что разрешение значения "[[not '] [' existing ']" предшествует вызову функции "isset" и приводит к ошибке времени выполнения.

0 голосов
/ 22 июля 2014

Ну, вы можете сделать это правильно:

1), как мы делаем в php:

$vara = "abc";
$a =0;

 while(isset($vara[a]){
a++;
} 

2), как я делаю в javascript:

vara = "abc";
 while (vara[a] != null){
a++;
}
...