私は、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"
undefined
はJavaScriptの偽の値かどうか、またはこの矛盾をどのように理解しますか?
あなたのコードでは、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"
undefined
は確かに偽物ですが、宣言される前に変数を使用するのはJavaScriptのエラーです。
let whatever = undefined
をどこかに追加して、予想される動作を確認します。
undefined
とnot defined
のエラーは異なります。 undefined
はdeclared変数の値です。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'...)");
}
}
Undefinedが偽であることを確認するには:
var whatever = undefined;
console.log(whatever || "undefined is really falsy");
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