English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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(メールを送信する際は、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとれると、このサイトは侵害された内容をすぐに削除します。)