Подтвердить что ты не робот

Двойные трубы в 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 или нет, или как понимать это противоречие?

4b9b3361

Ответ 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