JavaScript中的双管道(||)抛出错误而不是评估为假

问题描述 投票:22回答:5

我读到JavaScript中的双管道检查变量是否是假的,并且undefined是JavaScript中的假值,例如

这意味着如果值为falsey(例如0,“”,null,undefined(请参阅JavaScript中的所有falsey值)),则将其视为false;否则它被视为真实。

所以我尝试了这一点,发现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中是否具有虚假价值,或者如何理解这一矛盾?

javascript undefined boolean-operations
5个回答
36
投票

因为在你的代码中,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"

12
投票

undefined确实是假的,但是在声明之前使用变量是JavaScript中的一个错误。

在某处添加let whatever = undefined以查看您期望的行为。


7
投票

undefinednot 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>

not defined错误的示例:

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"
<div id="content"></div>

这里有一个例子,你如何检查,变量声明并且它有一个值(不是undefined):

let test = "test";

if (typeof test !== undefined) {
  console.log("'test' is declared");
  if(test) {
    console.log("'test' has a value (not 'null', 'false', 'undefined'...)");
  }
}

2
投票

确认undefined是假的:

var whatever = undefined;
console.log(whatever || "undefined is really falsy");

0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.