English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScriptの一部の暗黙的な変換とまとめ(おすすめ)

js内の異なるデータタイプ間の比較変換規則は以下の通りです:

1オブジェクトとブール値の比較

对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

オブジェクトとブール値を比較する場合、オブジェクトをまず文字列に変換し、次に数字に変換し、ブール値をそのまま数字に変換します。 //[] == true;1false []を文字列''に変換してから数字0に変換し、trueを数字に変換

2、したがってfalseです

. オブジェクトと文字列の比較

]]1,2,3オブジェクトと文字列を比較する場合、オブジェクトを文字列に変換して、その後比較します。1,2,3'' // ]] == ''1,2,3true [1,2,3]]に変換します1,2,3''、その後''と

3. オブジェクトと数字の比較

オブジェクトと数字を比較する場合、オブジェクトをまず文字列に変換し、次に数字に変換して、数字と比較します。

]]1]] === 1; // true オブジェクトをまず文字列に変換してから数字に変換し、再び比較します [1]] => ''1'' => 1 したがって結果はtrueです

4. 文字列と数字の比較

文字列と数字を比較する場合、文字列を数値に変換して比較します。

''1'' === 1 // true

5. 文字列とブール値の比較

文字列とブール値を比較する場合、両方を数値に変換して比較します。

''1'' == true; // true

6. ブール値と数字の比較

ブール値と数字を比較する場合、ブール値を数字に変換して比較します。

true === 1 // true

多くのJavaScript初心者がこれらの変換ルールに困惑しますが、実際のところ、規則は非常にシンプルです。以下の図を覚えておくと良いでしょう。

図のように、任意の2つの型を比較する場合、同じ型でない場合、図の方法で適切な型変換を行います。例えば、オブジェクトと布尔値を比較する場合、オブジェクト => 文字列 => 数値、布尔値 => 数値です。
また、特に注意が必要なものを見てみましょう。

面白い問題を見てみましょう

[] == false;
![] == false;

これらの結果はどちらもtrueです。最初のものは、オブジェクト => 文字列 => 数値0 falseを数字0に変換することになります。これはtrueであるべきです。
2番目の前のものに!が1つ増えている場合、直接布尔値に変換して逆転します。変換するとき、空文字列(''),NaN,0,null,undefinedのこれらのものはすべてtrueとして返されます。したがって![]の[]はtrueとされ、逆転するとfalseです。したがって[] == falseはtrueです。

覚えておくべきいくつかのものがあります:

undefined == null //true undefinedとnullを比較するとtrue、他の値と比較するとfalseが返されます。
Number(null) //0

かつてこんなコードを見たことがあります:  (!(~+[])+){}--[~+""+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb、あなたは信じられますか、その時、赤ん坊が驚きました。

初めてJavaScriptに触れたとき、私は非常に困惑しました。それは、それが「変化する」からです。以下にまとめます:

7. JSのデータ型: Number、Boolean、String、Undefined、Null、Symbol(es6新しく定義された(注:Arrayは特別なObjectです)

    typeofが返す7中の型: number boolean string object undefined object function

MDNはJavaScriptを以下のように説明しています:JavaScriptは弱い型言語または動的言語です。これは、変数の型を事前に宣言する必要はなく、プログラムの実行中に型が自動的に決定されることを意味します。これは、同じ変数で異なる型のデータを保存できることを意味します。

8. 下記に一般的な暗黙的な変換を見てみましょう:

  基本型:

   演算子(+,-,*,/)操作時の型変換

    」+「」演算子:   

          

                    

      まとめ:加号演算子では、Stringと他の型が他の型に変換されます;他のケースでは、すべてNumber型に変換されます。注:undefinedはNumberに変換されるのは'NaN'です。どのNumberとNaNを足すとNaNになります。

          他の演算子では、基本型はNumberに変換され、文字を持つString型の例えば:'1a' 、 'a1「」はNaNに変換されます。

      tip:(1) NaNはどの値とも等しくありません(自身も含めます)。したがって、値がNaNかどうかを判断するには「!==」を使用します。  

         (2) falseに変換されるのは:null、0、''、undefined、NaN、false  

        (3)number()とparseInt()はオブジェクトをNumber型に変換できますが、Number関数はparseInt関数よりも厳格です。基本的には、一文字でも数値に変換できない場合、整个の文字列はNaNに変換されます。  

  

  Object型

    当objectと基本型が演算される時:

var obj = {
  toString: function(){
    return 6;
  },
  valueOf: function(){
    return 5;
  }
};
var obj1 = {
  valueOf: function(){
    return 'a';
  },
  toString: function(){
    return 'b';
  }
};

           

                  

      

            obj,objに対して1 Number()とString()を使って変換する時

        

            要約:Number型はvalueOf()をまず呼び出し、String型はtoString()をまず呼び出します。結果が原始値の場合はその値を返し、そうでない場合はtoStringやvalueOfを続けて計算し、結果が原始値でない場合は型エラーを投げます。 

    以下の状況を見てください:

    

なぜ {} + [] = 0 &63; なぜなら、javascriptは実行中に最初の{}を空のコードブロックと認識するため、以下のようになります +[] = 0. さらに {} +5 = 5, 同様です。

要約:

1. 型エラーは型変換によって隠されることがあります。

2. 「+「」は文字列結合を示すこともできますし、算術加を示すこともできます。操作数によっては、文字列結合になります。

3. オブジェクトはvalueOfメソッドを通じて数字に変換され、toStringメソッドを通じて文字列に変換されます。

4. valueOfメソッドを持つオブジェクトは、等しい数字の文字列表現を返すための相应的toStringメソッドを定義する必要があります。

5. 未定義の変数を検出する場合、typeOfを使用したりundefinedと比較したりすることが推奨されます。真値演算子を使用することは推奨されません。

要約

以上の内容は、編集者が皆さんに紹介したJavaScriptの一部の暗黙の変換と要約(推奨)です。皆さんの助けになりますように。何か疑問があれば、コメントを残してください。編集者はすぐに回答します。また、このガイドのサポートに感謝しています。

声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に提供し、アップロードしたものであり、このサイトは所有権を有しておらず、人工編集もされていません。著作権侵害が疑われる内容を見つけた場合は、メールで notice#w までお知らせください。3codebox.com(メールを送信する際は、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとれると、このサイトは侵害された内容をすぐに削除します。)

おすすめ