Двойные трубы в JavaScript (||) бросают ошибку вместо оценки как ложь
Я читал, что двойные каналы в JavaScript проверяют, является ли переменная ложной и что undefined
является ложным значением в JavaScript, например
Это означает, что если значение ложно (например, 0, "", null, undefined (см. также все значения false в JavaScript)), это будет считаться ложным; в противном случае он считался истинным.
Итак, я попробовал это и обнаружил, что undefined действительно не получает оценку как ложность, но вместо этого выдает ошибку:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
http://jsfiddle.net/ueqo6yko
Является ли undefined
ложным значением в JavaScript или нет, или как понимать это противоречие?
Ответы
Ответ 1
Потому что в вашем коде whatever
есть не только undefined
, но и не объявлено
Чтобы избежать этой ошибки, вы можете сделать следующее:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += (typeof whatever !== 'undefined' && whatever) || 'ok3'; // "ok3"
Ответ 2
undefined
действительно ложный, но это ошибка в JavaScript для использования переменной до ее объявления.
Добавьте let whatever = undefined
где-нибудь, чтобы увидеть поведение, которое вы ожидаете.
Ответ 3
undefined
, а ошибка с not defined
отличается. undefined
- значение для переменной объявленной, когда ошибка с not defined
означает, что ваша переменная не объявлена.
Пример с undefined
:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let whatever;
console.log(whatever)
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "whatever is undefined"
<div id="content"></div>
Ответ 4
Чтобы подтвердить, что undefined является ложным:
var whatever = undefined;
console.log(whatever || "undefined is really falsy");
Ответ 5
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let c;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += c || 'ko'; // "ko"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
c undefined
. что есть undeclared