JavaScript の等価演算子に関する簡単な説明: == と === の違い
プログラミングの過程で、2 つの変数が等しいかどうかを判断する場面によく遭遇しますが、ECMAscript には 2 つの等価演算子「==」と「===」が用意されています。操作はブール値を返します。一般に、「== が等しい」および「=== が合同」と呼ばれます。
比較される 2 つの変数のデータ型が一貫している場合、状況は比較的単純ですが、演算子の両側の変数の型が一致していない場合、または変数の 1 つがオブジェクトである場合、状況はさらに複雑ですが、オペランドの型が異なる場合に演算結果がどうなるかを別途紹介します。
合同演算子「===」
合同演算子「===」 状況は比較的単純です。合同演算子「===」を用いて判定する場合は、まず演算子の両辺のオペランドのデータ型が一致しているかどうかを確認し、一致していない場合はそのまま false を返します。一致していない場合は次の判定が行われます。作られる。
2 つのブール値の比較の場合、「===」が true を返す前に、「===」の両側が両方とも true または false である必要があり、そうでない場合は false が返されます。2 つの比較が数値の場合は、次のようになります。 Only if 2 つの数値のサイズが等しい場合にのみ True が返され、それ以外の場合は false が返されます。
比較する 2 つの変数が文字列の場合、まず 2 つの文字列の長さを比較して等しいかどうかを確認します。長さが異なる場合は false を返します。等しい場合は、先頭から開始します。 2 つの変数。文字が等しいかどうかの比較が開始され、最後の桁まで継続されます。桁の 1 つが待ちたくない場合は false が返され、そうでない場合は true が返されます。
(注: 文字列の比較ではスペースは無視されません。そのため、2 つの文字列が等しいかどうかを比較するときは、安全性を確保するために、まずスペースを削除してから、2 つの文字列を大文字の Or に変換する必要があります。小文字にしてから比較します)。
null は、null===null の場合にのみ true を返し、それ以外の場合は false を返します。同様に、unknown は、unknown===unknown の場合にのみ true を返し、それ以外の場合は false を返します。例:
true === 1 //false "1" === 1 //false //boolean的比较 true === true //true true === false //false //string的比较 "hello" === "helloworrld" //false "hello" === "world" //false "hello" === " hello" //false "hello" === "hellO" //false "hello" === "hello" //true //number的比较 1 === 1 //true 1 === 1.0 //true 1 === 1.2 //false //null和undefined的比较 undefined === undefined //true null === null //true undefined === null //false,两者在"=="时才返回true
「===」比較の2つのオペランドが基本型の値ではなく2つのオブジェクトの場合、このときの判断基準は2つの変数が「同じ」かどうかです。 Object
var a,b,c; a = b = { name : '柳轻侯', city : '南京' }; c = { name : '柳轻侯', city : '南京' }; a === b //true a === c //false
2 つのオブジェクトが「同じに見える」だけでは十分ではありません。a と c はどちらも Object インスタンスであり、同じプロパティと値を持っていますが、「同じ」オブジェクトではありません。なぜなら、a と c は実際には 2 つの異なるインスタンスを指しているため、2 つのオブジェクトは一致しないからです。
しかし、a と b は同じオブジェクトを指します。つまり、a と b は同じオブジェクトの別のエイリアスです。実際にはまったく同じオブジェクトを指すため、a === b となります。 「!==」と「===」の比較ルールは同じなので、ここでは繰り返しません。
等値演算子」==”
合同演算子が判定を行う際、2 つの変数の型が異なる場合は、直接は false を返しますが、これとは異なり、「==」等価演算子で判定する場合、2 つの変数の型が異なる場合は、比較対象の 2 つの値を同じに変換する暗黙の型変換が行われます。型は再度比較されますが、変換規則は何ですか?
異なるデータ型を変換する場合、等価演算子と不等号演算子は次の基本規則に従います。
- オペランドの 1 つがブール値の場合は、比較前に比較されます。ブール値は数値に変換され、true は 1 に変換され、false は 0 に変換されます。
- オペランドの 1 つが文字列型で、もう 1 つが数値型の場合、文字列型は数値に変換されます。比較前に型が判断されます;
- 比較前に、未定義および null は比較のために他の値に変換されません;
- オペランドの一方がオブジェクトで、もう一方がオブジェクトである場合が基本型の値である場合、オブジェクトは比較前に基本型の値に変換され、その後の比較は前述の規則に従って行われます。
#2 つのオペランドは比較時に次の規則に従います
- unknown と null は等しいです。つまり、未定義 == null;
- 一方のオペランドが NaN の場合、false が返されます。両方のオペランドが NaN の場合でも、false が返されます。 ;
- 2 つのオペランドがオブジェクトの場合、比較規則は「===」の比較規則と同じです。2 つのオペランドが同じオブジェクトでない場合は true を返し、そうでない場合は false を返します。
ここで、NaN == NaN は false を返すことに注意してください。NaN は数値ではない、つまりオペランドが非数値であることを意味します。この非数値は不確実です。値は不明です。また、JavaScript 構文を使用して表現することさえできない場合があります。このような未知の量は、特定の比較には使用できません。2 つの未知の値が何であるかを決定できない場合、当然、NaN == NaN とは言えません。
では、「==」を使用して比較することはできないので、変数が NaN であるかどうかをどのように判断すればよいでしょうか? 等価性を使用して判断することはできないため、逆の「!=」を使用することもできます。変数が NaN に等しくないかどうかを判断します。例:
//如果需要判定一个变量是不是NaN,可以如下 //a是你需要判定的变量 if((typeof a === "number") && a != NaN ){ //此处需要注意,NaN也是number类型 //TODO }
一般的な比較状況とその結果
null == undefined // true "NaN" == NaN // false 5 == NaN // false NaN == NaN // false NaN != NaN // true false == 0 // true true == 1 // true true == 2 // false undefined == 0 // false null == 0 // false "5" == 5 // true
典型的な例の分析
![] == [] //true
这是一道比较容易令人困惑的题,按照正常的思维模式,对一个操作数逻辑取反,跟这个操作数本身的值是相对的,如果这个操作数本身的值是true,那么取反之后就是false,反之,如果这个操作数的值是false,那么对其逻辑取反之后就是true,无论如何也不会是同一个值,可是事实上却是![] == []。
首先,![]的值是false,因为这里[]被当成了一个数组的实例,是一个对象,而对象都是真值,对其取反,得到一个假值,也就是false。
其次看等号右边,[]是一个对象,要将其转为基本类型值,会先调用数组的valueOf方法,而数组的valueOf方法返回数组本身,没有得到一个基本值。
这时候要继续调用数组的toString方法,得到一个””空字符串,所以这时候也就变成了false == “”是否为真的问题了,而根据前面的规则,如果有一个操作数为boolean值,会将其转为数值,false转化为0。
进而,问题转化为0 == “”是否为真值的问题,当number和string比较时,会将string转为number,而””会转为0。最后,问题变演化成了0 == 0是否为真值,毋庸置疑,结果是true。
这里要注意的就是![],它被当成了一个整体的逻辑值,是直接对对象进行取反,是一个假值,而不是先把[]转化为基本值再取反
小结
“==”在比较不同类型值得时候会进行隐式的类型转化,而”===”不会转化,全等一定相等,相等却不一定全等,这是一个充分不必要条件。
undefined和null相等而不全等,且在相等比较的时候不会转化为其他类型的值。NaN是不等于NaN 的,要判断某个变量是不是NaN,要用”!=”。对象和非对象在进行比较的时候会先转为基本类型值然后再根据上面的规则进行比较。
推荐教程:《JS教程》
以上が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 と Baidu Map を使用してマップ パン機能を実装する方法 Baidu Map は広く使用されている地図サービス プラットフォームで、Web 開発で地理情報、位置情報、その他の機能を表示するためによく使用されます。この記事では、JS と Baidu Map API を使用してマップ パン機能を実装する方法と、具体的なコード例を紹介します。 1. 準備 Baidu Map API を使用する前に、Baidu Map Open Platform (http://lbsyun.baidu.com/) で開発者アカウントを申請し、アプリケーションを作成する必要があります。作成完了

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

株式分析に必須のツール: PHP および JS でローソク足チャートを描画する手順を学びます。特定のコード例が必要です。インターネットとテクノロジーの急速な発展に伴い、株式取引は多くの投資家にとって重要な方法の 1 つになりました。株価分析は投資家の意思決定の重要な部分であり、ローソク足チャートはテクニカル分析で広く使用されています。 PHP と JS を使用してローソク足チャートを描画する方法を学ぶと、投資家がより適切な意思決定を行うのに役立つ、より直感的な情報が得られます。ローソク足チャートとは、株価をローソク足の形で表示するテクニカルチャートです。株価を示しています

PHP と JS を使用して株のローソク足チャートを作成する方法。株のローソク足チャートは、株式市場で一般的なテクニカル分析グラフィックです。始値、終値、最高値、株価などのデータを描画することで、投資家が株式をより直観的に理解するのに役立ちます。株価の最低価格、価格変動。この記事では、PHP と JS を使用して株価のローソク足チャートを作成する方法を、具体的なコード例とともに説明します。 1. 準備 開始する前に、次の環境を準備する必要があります。 1. PHP を実行するサーバー 2. HTML5 および Canvas をサポートするブラウザー 3

JS と Baidu Maps を使用してマップ ヒート マップ機能を実装する方法 はじめに: インターネットとモバイル デバイスの急速な発展に伴い、マップは一般的なアプリケーション シナリオになりました。視覚的な表示方法として、ヒート マップはデータの分布をより直観的に理解するのに役立ちます。この記事では、JS と Baidu Map API を使用してマップ ヒート マップ機能を実装する方法と、具体的なコード例を紹介します。準備作業: 開始する前に、次の項目を準備する必要があります: Baidu 開発者アカウント、アプリケーションの作成、対応する AP の取得

JS と Baidu Maps を使用してマップ クリック イベント処理を実装する方法の概要: Web 開発では、地理的位置と地理情報を表示するためにマップ関数を使用することが必要になることがよくあります。マップ上のクリック イベント処理は、マップ機能の一般的に使用される重要な部分です。この記事では、JS と Baidu Map API を使用して地図のクリック イベント処理機能を実装する方法と、具体的なコード例を紹介します。手順: Baidu Map の API ファイルをインポートします。まず、Baidu Map API のファイルを HTML ファイルにインポートします。これは、次のコードによって実現できます。

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

JS と Baidu Maps を使用して地図ポリゴン描画機能を実装する方法 現代の Web 開発において、地図アプリケーションは一般的な機能の 1 つになっています。地図上にポリゴンを描画すると、ユーザーが表示および分析できるように特定のエリアをマークするのに役立ちます。この記事では、JS と Baidu Map API を使用して地図ポリゴン描画機能を実装する方法と、具体的なコード例を紹介します。まず、Baidu Map API を導入する必要があります。次のコードを使用して、Baidu Map API の JavaScript を HTML ファイルにインポートできます。
