Javascriptにおける二重等号(==)の暗黙的な変換機構の詳細説明
JavaScript には 2 種類の等号関係があります: 二重等号 (==) と三重等号 (===) です。 2 つの等号 (==) は値の等しいことを示し、3 つの等号 (===) は厳密な等しい (値と型が完全に等しいかどうか) を示します。この記事では主に JavaScript における二重等号 (==) の暗黙的な変換メカニズムを詳しく紹介します。これは非常に優れており、必要な方は参考にしていただければ幸いです。
そこで、いくつかの常識的な知識があります:
1. 文字列や数値などの基本的な型の場合、== と === には違いがあります
1) 異なる型間の比較、「== に変換した後」同じ型の「値」を比較して、「値」が等しいかどうかを確認します。 ===型が異なると、結果は等しくなくなります
2) 同じ型を比較し、「値」を直接比較すると、結果は次のようになります同じです
2. 配列、オブジェクトなどの場合、高度な型の場合、==と===に違いはありません
「ポインタアドレス」を比較します
3. 基本型と高度な型では違いがあります。 ==と===の間
1) ==の場合、基本型への高度な変換、「値」の比較
2) 型が違うので、===の結果は偽になります
つまり、double等号 (==) は演算中に型変換を実行し、3 番目の等号は演算中に型変換を実行します。いいえ (===) は実行しません。
例:
alert('55' == 55); //true alert('55' === 55); //false
Javascript 言語の 5 つの基本データ型 (プリミティブ値、単純なデータ型とも呼ばれる): 未定義、Null、ブール、数値、文字列。これらのプリミティブ型は固定量のスペースを占有するため、より小さなメモリ領域、つまりスタックに格納できます。このようなストレージにより、変数の値の迅速な検索が容易になります。
JavaScript で二重等号 (==) を使用して、両側が単純型の場合:
1、1,1 の暗黙の変換メカニズムを決定します。 、両側が単純な型であり、型が同じであるため、直接比較します。
console.log(1==1); //true console.log("1"=="1"); //true console.log(false==false); //true console.log(null==null); //true console.log(undefined==undefined); //true
1.2. 両側が単純型である場合、型が異なる場合は、最初に数値比較に変換されます (ブール値は true==1、false==0 の 2 つの値のみ、null と unknown は等しい、文字列の数値)。空の文字列 ""==0;)
console.log(1==true); //true console.log(0==false); //true console.log(1=="1"); //true console.log(0==""); //true console.log(0==null); //false console.log(0==undefined); //false console.log(null==undefined); //true
2. 一方が単純型で、もう一方が参照型 (高度な型) の場合、高度な型は暗黙的に単純型に変換されます。比較する前に。
console.log(Object==Object); //true console.log(Object=={}); //false console.log(0=={}); //false console.log(0==[]); //true console.log(Array==Array); //true console.log(Object==Array); //false
3. 両側が参照型(高度な型)の場合、「ポインタアドレス」の比較が実行されます。
重要な点 - toString() と valueOf()
これら 2 つのメソッドを見たときに多くの人が抱く第一印象は、toString() メソッドはオブジェクトを文字列に変換し、valueOf メソッドはオブジェクトを数値に変換するということです。 。
この考えは非常に一方的です。次の 2 つの例を見てみましょう:
var obj={ name:"熊仔其人", getName:function(){ return $(this).name; } }; console.log(obj.toString()); //[object Object]
obj オブジェクトを定義し、その toString メソッドを呼び出します。戻り値は [object Object] ですが、値が返されないことを確認します。私たちが想像したように、その内容の文字列表現。
var arr=[1,2,3]; console.log(arr.valueOf()); //(3) [1, 2, 3]
配列 arr を定義し、その valueOf メソッドを呼び出します。戻り値は [1, 2, 3] ですが、想像したような数値表現が返されないことがわかります。
実際、本当の理解は次のとおりです。オブジェクトの toString() メソッドを呼び出すと、オブジェクトを文字列に変換できますが、文字列に変換したい場合は、必ずしも toString メソッドを呼び出す必要はありません。
以下のコードをもう一度見てみましょう。
var obj= { }; obj.valueOf=function(){ return 1; } obj.toString=function(){ return 2; } console.log(obj==1); //true var obj2= { }; obj2.valueOf=function(){ return 2; } obj2.toString=function(){ return 1; } console.log(obj2==1); //false var obj3={ }; obj3.valueOf=function(){ return []; } obj3.toString=function(){ return 1; } console.log(obj3==1); //true
上記のコードでは、オブジェクトobj、obj2を定義し、valueOfメソッドとtoStringメソッドの戻り値を定義し、それらが等しいかどうかを1と比較すると、valueOfメソッドが最初に呼び出されることがわかりました。
次にオブジェクトobj3を定義し、valueOfメソッドとtoStringメソッドの戻り値を定義し、1と等しいかどうかを比較すると、toStringメソッドを呼び出していることがわかります。
次に、次のコードを見てみましょう:
var obj= { }; obj.valueOf=function(){ return 'a'; } obj.toString=function(){ return 2; } console.log(obj=='a'); //true var obj2= { }; obj2.valueOf=function(){ return 'b'; } obj2.toString=function(){ return 'a'; } console.log(obj2=='a'); //false
オブジェクト obj は、上記のコード 2 で定義されています。それを文字列 'a' と比較することで、valueOf メソッドを呼び出していることがわかります。
すると、オブジェクト obj2 と 'a' の比較は false を返し、toString メソッドが呼び出されないことがわかります。
これから結論を導き出すことができます:
オブジェクトが単純な型に変換されると、最初に valueOf メソッドが呼び出され、単純な値と比較できる場合は直接比較され、次に toString メソッドが呼び出されます。現時点では呼び出されなくなります。 valueOf メソッドを呼び出した後、valueOf メソッドを単純な値と比較できない場合は、最終的に比較結果を取得するために toString メソッドが再度呼び出されます。
ただし、Date オブジェクトは上記のルールを満たしていないことに注意してください。Date オブジェクトの toString メソッドと valueOf メソッドは再定義されており、デフォルトで toString メソッドが呼び出されます。
追記: js の二重等号の暗黙的な変換ルール
比較に二重等号を使用する場合、2 つのオペランドの型が異なる場合、二重等号は暗黙的な変換を実行し、比較する前に同じ型に変換します。以下は、Little Red Book の P51 ページに記載されている変換規則です。 (私はいつも忘れてしまいますが、記憶力の良さは文章の悪さほどではないと今でも感じています。書くことは常に大きな影響を与えます)
1. 1 つのオペランドはブール値です。ブール値を数値に変換して比較します。 . false は 0、true は 1.
2。1 つは文字列で、もう 1 つは数値です。文字列を数値に変換し、比較します。
3. 1 つの演算子はオブジェクトであり、もう 1 つはオブジェクトではありません。まず、valueOf() を使用してオブジェクトの値の型を取得し、その後、他のルールに従って比較します。
関連する推奨事項:
以上がJavascriptにおける二重等号(==)の暗黙的な変換機構の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

インターネット金融の急速な発展に伴い、株式投資を選択する人がますます増えています。株式取引では、ローソク足チャートは一般的に使用されるテクニカル分析手法であり、株価の変化傾向を示し、投資家がより正確な意思決定を行うのに役立ちます。この記事では、PHP と JS の開発スキルを紹介し、株価ローソク足チャートの描画方法を読者に理解してもらい、具体的なコード例を示します。 1. 株のローソク足チャートを理解する 株のローソク足チャートの描き方を紹介する前に、まずローソク足チャートとは何かを理解する必要があります。ローソク足チャートは日本人が開発した

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

CSS のリフローと再描画は、Web ページのパフォーマンスの最適化において非常に重要な概念です。 Web ページを開発する場合、これら 2 つの概念がどのように機能するかを理解すると、Web ページの応答速度とユーザー エクスペリエンスを向上させることができます。この記事では、CSS のリフローと再描画の仕組みを詳しく説明し、具体的なコード例を示します。 1. CSS リフローとは何ですか? DOM 構造内の要素の表示、サイズ、位置が変更されると、ブラウザは CSS スタイルを再計算して適用し、再レイアウトする必要があります。

現在のページを更新する js メソッド: 1. location.reload(); 2. location.href; 3. location.assign(); 4. window.location。詳細な紹介: 1. location.reload()、location.reload() メソッドを使用して現在のページを再読み込みします; 2. location.href、location.href 属性などを設定することで現在のページを更新できます。

JS-Torch の概要 JS-Torch は、構文が PyTorch に非常に似ている深層学習 JavaScript ライブラリです。これには、完全に機能するテンソル オブジェクト (追跡された勾配で使用可能)、深層学習レイヤーと関数、および自動微分エンジンが含まれています。 JS-Torch は JavaScript での深層学習の研究に適しており、深層学習の開発を加速するための便利なツールや機能を多数提供します。 Image PyTorch は、Meta の研究チームによって開発および保守されているオープンソースの深層学習フレームワークです。ニューラル ネットワーク モデルを構築およびトレーニングするための豊富なツールとライブラリのセットを提供します。 PyTorch は、シンプル、柔軟、そして使いやすいように設計されており、その動的な計算グラフ機能により、
