[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
質問
を使っています。
JSLint
を置き換えるための多くの提案を返しています。
==
(2つのイコール記号)を
===
(3つの等号) を比較するような場合に使用します。
idSele_UNVEHtype.value.length == 0
の中にある
if
ステートメントを使用します。
を置き換えることで、パフォーマンス上の利点はあるのでしょうか?
==
で
===
?
多くの比較演算子が存在するため、パフォーマンスの向上があれば歓迎します。
型変換が行われない場合は
==
?
解決方法は?
厳密な等号演算子(
===
) は、抽象的な等号演算子 (
==
) ただし、型変換は行われず、等しいとみなすためには型が同じでなければなりません。
参考にしてください。 ジャバスクリプトのチュートリアル。比較演算子
は
==
演算子は、同じかどうかを比較します。
必要な型変換を行った後
. また
===
演算子は
ない
は変換を行うので、2つの値が同じ型でない場合は
===
は単に
false
. どちらも同じように速いです。
ダグラス・クロックフォード氏の素晴らしい著作を引用します。 JavaScript。良いところ ,
<ブロッククオート
JavaScriptには、2種類の等式演算子があります。
===
と
!==
そして、その邪悪な双子
==
と
!=
. 良いものは期待通りの働きをします。 もし2つのオペランドが同じ型で同じ値であれば
===
を生成します。
true
と
!==
を生成する
false
. 邪悪な双子はオペランドが同じ型のときは正しいことをするが、異なる型のときは値を強制しようとする。そのためのルールは複雑で記憶できない。 これらは興味深いケースである。
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
他律性の欠如が心配です。 私のアドバイスは、邪悪な双子を決して使わないことです。 その代わり、常に
===
と!==
. 今示したすべての比較はfalse
と共に===
演算子を使用します。
更新情報
によって、良い指摘がなされました。
ケースバッシュ
をコメントで、そして
Phillipe Laybaertの
回答
オブジェクトに関するものです。 オブジェクトについて
==
と
===
は互いに矛盾なく作用する(特殊な場合を除く)。
var a = [1,2,3];
var b = [1,2,3];
var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };
var e = "text";
var f = "te" + "xt";
a == b // false
a === b // false
c == d // false
c === d // false
e == f // true
e === f // true
特殊なケースとして、プリミティブと同じプリミティブとして評価されるオブジェクトを比較する場合、そのプリミティブの
toString
または
valueOf
メソッドを使用します。例えば、文字列プリミティブと
String
コンストラクタを使用します。
"abc" == new String("abc") // true
"abc" === new String("abc") // false
ここでは
==
演算子は、2 つのオブジェクトの値をチェックして
true
が、しかし
===
は、それらが同じ型でないことを見抜き
false
. どちらが正しいのでしょうか? それは、何を比較しようとしているかによります。 私のアドバイスは、質問を完全に回避して、単に
String
コンストラクタを使用して、文字列リテラルから文字列オブジェクトを作成します。
参照
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
関連
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] Javascriptの配列に、指定された値に等しい属性を持つオブジェクトが含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] CSSは常にJavascriptより優先されるべきか?
-
[解決済み] JavaScriptのinstanceof演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み] テスト
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み] JavaScriptでは、!=は!==と同じです[重複]。
-
[解決済み] JavaScriptにおける==と===の違い [重複].