web-dev-qa-db-ja.com

JavaScript(||)の二重パイプが偽として評価する代わりにエラーをスローする

私は、JavaScriptの二重パイプが変数が偽であるかどうかを確認するためにチェックし、undefinedがJavaScriptで偽の値であることを読み取りました。

これは、値がfalse(例:0、 ""、null、未定義(JavaScriptのすべてのfalse値も参照)の場合)はfalseとして扱われることを意味します。それ以外の場合は、trueとして扱われます。

だから私はこれを試してみて、未定義は確かに偽物として評価されず、代わりにエラーをスローすることがわかりました:

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の偽の値かどうか、またはこの矛盾をどのように理解しますか?

22
Edward Tanguay

あなたのコードでは、whateverundefinedであるだけでなく、さらに宣言されていません

このエラーを回避するには、次のようにします。

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"
37
laruiss

undefinedは確かに偽物ですが、宣言される前に変数を使用するのはJavaScriptのエラーです。

let whatever = undefinedをどこかに追加して、予想される動作を確認します。

12
user94559

undefinednot definedのエラーは異なります。 undefineddeclared変数の値です。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'...)");
  }
}
8

Undefinedが偽であることを確認するには:

var whatever = undefined;
console.log(whatever || "undefined is really falsy");
2
Faly
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

0
ChaosPredictor