[解決済み】JavaScriptのすべてのfalsey値
質問
JavaScriptで「falsey」な値とは?
のような式で偽と評価されることを意味します。
if(value)
,
value ?
と
!value
?
があります。 Stack Overflowでは、すでにfalsey値の目的についていくつかの議論がなされています。 しかし、すべてのfalsey値が何であるかを列挙した包括的な完全回答はありません。
MDN JavaScript Referenceで完全なリストを見つけることができませんでした。
そして、JavaScriptにおけるfalsey値の完全で権威あるリストを探したときに、トップ結果がブログ記事であったことに驚きました。
NaN
また、Stack Overflowのように、コメントや別の答えを追加して、癖や驚き、抜け、間違い、注意点などを指摘できるような形式をとっているものはありませんでした。だから、作ることに意味があるように思えたのです。
解決方法は?
JavaScriptにおける偽の値
-
false
-
のゼロ
Number
型を使用します。0
また-0
,0.0
および16進数形式0x0
( サンクスRBT ) -
のゼロ
BigInt
タイプになります。0n
と0x0n
(2020年新設。 ありがとうGetMeARemoteJob ) -
""
,''
と``
- 長さ0の文字列 -
null
-
undefined
-
NaN
-
document.all
(HTMLブラウザのみ)-
これは変なやつだ。
document.all
はfalseyオブジェクトでtypeof
としてundefined
. IE11以前のIEではマイクロソフトのプロパー機能で JavaScriptの仕様に対する故意の違反としてHTML仕様に記載されています。 IE用に書かれたサイトが、例えばアクセスしようとすると壊れないようにするためだ。document.all.something
というのはif (document.all)
は、条件付きコメントの前に、IE を検出するための一般的な方法でした。参照 なぜdocument.allはfalyなのですか? 詳細はこちら
-
これは変なやつだ。
Falsey"は、単に、JavaScriptの内部で
ToBoolean
関数が返す
false
.
ToBoolean
下敷き
!value
,
value ? ... : ...;
と
if (value)
. 以下はその
公式仕様書(2020年作業草案)
(からの変更点のみ)。
1997年の最初のECMAscript仕様
が追加されたことです。
ES6のシンボル
は常に真理であり
BigInt
である。
false
.
Null
戻る
false
.
ブーリアン
戻る
引数
.
番号
引数が
+0
,
-0
または
NaN
を返します。
false
それ以外の場合は
true
.
文字列
引数が空の場合
String
(長さが0)の場合は
false
を返し、それ以外の場合は
true
.
BigInt
引数が
0n
を返します。
false
それ以外の場合は
true
.
記号
戻る
true
.
対象物
戻る
true
.
との比較
==
(緩やかな等式)
ファルシーバリューの話をするのは価値がある
との緩やかな比較
==
を使用しています。
ToNumber()
というように、根本的な違いがあるため、混乱を招くことがあります。事実上、3つのグループを形成しています。
-
false, 0, -0, "", ''
はすべて==
-
例
false == ""
,'' == 0
したがって4/2 - 2 == 'some string'.slice(11);
-
例
-
null, undefined
と一致します。==
-
例
null == undefined
しかしundefined != false
-
また
typeof null
リターン'object'
,null
は これは長年のバグ/不具合です。 互換性を維持するために修正されなかったものです。それは真のオブジェクトではなく、オブジェクトは真理である(その"故意の違反"を除いては。document.all
JavascriptがHTMLに実装されている場合)
-
例
-
NaN
は何もマッチしません。==
または===
それ自身でもない-
例
NaN != NaN
,NaN !== NaN
,NaN != false
,NaN != null
-
例
厳密な等式(quot;strict equality")で(
===
) の場合、そのようなグループ分けはありません。ただ
false
===
false
.
これが、多くの開発者や多くのスタイルガイド(例.
スタンダードジーズ
を好む。
===
を使用することはほとんどありません。
==
.
実際にある真実の価値
== false
Truthy"は、単にJavaScriptの内部で
ToBoolean
関数が返す
true
.
注意すべきJavascriptの癖
(を好むもう一つの理由です。
===
オーバー
==
): 値が真実であることは可能である (
ToBoolean
が返ってくる
true
) だけでなく
== false
.
と思うかもしれません。
if (value && value == false) alert('Huh?')
は論理的に不可能なことで、起こるはずがないのですが、起こるのです、なぜなら。
-
"0"
と'0'
- は空でない文字列であり、真理であるが、Javascriptの==
は数字と同等の文字列(例えば42 == "42"
). このため0 == false
もし"0" == 0
,"0" == false
. -
new Number(0)
そしてnew Boolean(false)
- はオブジェクトであり、それは真理である、しかし==
は、その値を見ています。== false
. -
0 .toExponential();
- と同等の数値を持つオブジェクト。0
- 偽と等しい値を真である型に包んで与える類似の構文すべて
-
[]
,[[]]
と[0]
(ありがとうございます クラウドフィート には JavaScript均等表リンク )
より真実味のある価値観
これらは、ある人が「嘘くさい」と思うような、実は真実味のある値です。
-
-1
およびすべての非ゼロ負数 -
' '
," "
,"false"
,'null'
... すべて 空白文字だけの文字列を含む、空でない文字列 -
からのもの
typeof
のように、常に空でない文字列を返します。-
typeof null
(文字列を返す'object'
長年のバグ/不具合により ) -
typeof undefined
(文字列'undefined'
)
-
-
あらゆるオブジェクト(ただし、故意の違反は除く。
document.all
をブラウザで表示します)。以下のことを忘れないでください。null
は実際にはオブジェクトではありません。typeof
はそうでないことを示唆しています。例-
{}
-
[]
-
function(){}
または() => {}
(任意の関数、空関数を含む) -
Error
のインスタンスとError
- 任意の正規表現
-
で作成されたもの
new
(を含む)。new Number(0)
とnew Boolean(false)
)
-
-
任意の 記号
true
,
1
,
"1"
と
[1]
戻る
true
で比較した場合
==
.
関連
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】中央値の計算 - javascript
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み] テスト
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする