すぐに警告します、はい、記事は少し間違っています。コメントを歓迎します。明確な説明があります)。良い一日。
JavaScriptには、==と===という2つの類似した演算子があります。 それらの違いがわからない場合、これは多くの間違いにつながる可能性があります。 そこで、このトピックを開くことにしました。 ==と===が正確にどのように異なるか、それらがどのように機能するか、これが起こる理由、およびエラーを回避する方法。
演算子==は等値で比較しますが、===-同一性で比較します。 ===演算子の利点は、2つの値を同じ型にキャストしないことです。 このため、通常使用されます。
abc == undefined;
abc == false;
結局のところ、falseと0(または ''、または[])を混同することはほとんどありません。
もちろん:
5 === 5;
そして今、興味深い例です。
5 == 5;
なぜこれが起こっているのですか? はい、任意の番号はNumberクラスのオブジェクトです。 しかし、あなたは数として数を想像することができます-いくつかの定数。 一度宣言され、常にそれ自体と同一です。 しかし、同時にNumberクラスの新しいオブジェクトを宣言します-値は同じですが、同一ではありません(これらはNumberクラスの2つの完全に異なるオブジェクトであるため)。
配列/オブジェクト
ただし、配列とオブジェクトの場合、両方の演算子は同じように機能し、同一性を比較します。
var a = {}; a == {};
配列とオブジェクトを比較するために、特別な関数を書くことができます:
function isEq(a, b){ if(a == b) return true; for(var i in a){ if(!isEq(a[i], b[i])) return false; } for(var i in b){ if(!isEq(a[i], b[i])) return false; } return true; }
少しずさんで、2サイクルあり、
hasOwnPropertyを忘れました。 まあ、それはやります。
この<-
別の落とし穴があります。 これはこれへのパスです。
(function(){ this == 5;
ここにそのような瞬間があります。 それを忘れないことは価値があります。
合計...
さて、ここで独自のスーパーフレームワークを作成していると想像してください。==の代わりに===演算子を積極的に使用します。それは単にそれがきれいだからです。
func(new Number(5)); (function(){ func(this); }).call(5);
そのような例は実行可能ではないようです? お願い!
jQuery:
$.each([1, 2, 3, 4, 5], function(){ func(this); });
さて、または私は図を拡大したかった。
var Five = new Number(5); Five.a = 2;
それだけです。誰かが役に立つことを願っています。 ご清聴ありがとうございました。
UPD。 リンク
vermilion1 、
JS Gardenに感謝します。