Има ли нещо нередно в този тест за неопределен?
var undefined;
if(x == undefined){
//do something
}
или това:
function undefined(x){
return typeof x == "undefined";
}
if(undefined(x)){
//do something
}
jsLint не хвърля погрешна дума, но кодът все още работи
Отговори:
7 за отговор № 1Други програмисти очакват undefined
да бъде винаги undefined
, а не функция заради функцията.
Хората често използват typeof
оператор, за да се гарантира, че не се хвърля грешка при позоваване, когато се използва за тестване на променливи, които са undefined
.
Ако някой някога направи това за вас, можете да използвате ...
undefined = void 0;
... за да го върнете обратно.
5 за отговор № 2
Като undefined
не е Ключова дума на Javascriptняма нищо лошо в това.
Въпреки това, вие пренебрегвате основна променлива, кояточесто се използва за проверка на недефинираните променливи във втория ви пример като функция. Аз изпитвам и забранявам този човек като изпълнител, ако видя, че в някой кодекс, който преглеждах.
1 за отговор № 3
undefined
е само свойство по подразбиране на глобалния обект, което можете да замените / предефинирате. Затова винаги трябва да тествате undefined
използвайки typeof x == "undefined"
, тъй като typeof
операторът не може да бъде предефиниран.
var undefined;
if(x == undefined){
//do something
}
Това, което се случва тук, е, че определяте нова променлива "Неопределен", която не присвоявате на стойност и която по този начин получава стойността undefined
. x
не е дефиниран и също има стойност undefined
, Следователно и двамата са равни. Това обаче е доста безсмислено.
1 за отговор № 4
undefined
не е запазена дума в JavaScript (ECMA-262). Това е константа с име Undefined;
С деклариране:
var undefined;
декларирате променлива със същото име в локалния обхват.
Така че технически можете да направите това, просто не дефинирайте нещо подобно:
var undefined = 13;