Существует различие в том, как JavaScript обрабатывает необъявленные переменные (неопределенная переменная) и неопределенные значения. В следующем примере переменная dan
объявлена, но никогда не устанавливается, поэтому ее значение равно undefined
|| возвращает первое значение true
, которое может найти, поэтому, если я передаю что-либо, кроме пустой строки, 0, false, NaN, undefined или NULL, это будет console.log переданное значение. Иначе он будет записывать «значение по умолчанию».
function test(dan){
console.log(dan || "default value");
return dan===undefined;
}
console.log(test());//default value, then true
console.log(test(22));//22 then false
Более надежный способ проверки, если переменная была передана бы увидеть, если значение переменной не определено:
function test(dan){
dan = (typeof(dan)==='undefined')?"default value":dan;
}
В вашем примере переменная dan
не объявлена на всех (переменная undefined), поэтому вы получаете ошибку «dan не определен», потому что dan не объявляется вообще.
function test(){
return dan===undefined;//ReferenceError: dan is not defined
}
console.log(test());
Вы можете изменить свой код на этот:
var sha = 6, dan;//dan is declared here but no value is set
var secondParameter = dan || sha;
console.log(dan===undefined);//true
console.log(secondParameter);//6
Если вы хотите проверить, если определенный объект имеет свойство, то он не будет выдавать ошибку:
function test(){
return window.neverSetOrDeclared===undefined;
}
console.log(test());//true
Он будет вызывать ошибку при попытке проверить свойство неопределенного или null:
null.something//throws error
undefined.something//throws error
window.neverSetOrDeclared===undefined//throws error
'dan' не определен. посмотрите консоль ошибок. – akonsu
Попытка получить доступ к неопределенной переменной вызывает ошибку. – Barmar
Существует большая разница между неопределенной переменной и переменной с неопределенным значением. – thefrontender