ホームページ  >  記事  >  ウェブフロントエンド  >  JS における暗黙的な変換の概要

JS における暗黙的な変換の概要

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-13 17:17:591645ブラウズ

今回は、JS での暗黙的変換の使用についていくつかまとめてみます。JS での暗黙的変換を使用する際の 注意事項 について、実際のケースを見てみましょう。

js 内の異なる データ型 間の比較と変換のルールは次のとおりです:

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

オブジェクトとブール値を比較する場合、オブジェクトはまず文字列に変換され、次に数値に変換され、ブール値は直接数値に変換されます

[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false

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

オブジェクトと文字列を比較する場合、オブジェクトは文字列に変換されてから 2 つが比較されます。

りー

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

オブジェクトを数値と比較する場合、オブジェクトはまず文字列に変換され、次に数値に変換されて、その数値と比較されます。

りー

4. 文字列と数値の比較

文字列と数値を比較する場合、文字列は数値に変換されてから 2 つが比較されます。

りー

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

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

りー

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

ブール値を数値と比較する場合、ブール値は数値に変換され、2 つが比較されます。

[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;

2 つの型を比較す​​る場合、それらが同じ型でない場合は、図に示すように、対応する 型変換 を実行します。たとえば、オブジェクトがブール型で比較される場合、オブジェクト => 文字列 => 数値ブール = >番号。
さらに、「特別な注意」が必要なものをいくつか見てみましょう。

興味深い質問を見てみましょう

rreee

これら 2 つの結果は両方とも true です。最初の結果は、object=> string=> value 0 が数値 0 に変換されます。2 番目の結果は、先頭に ! が付いています。つまり、ブール値に直接変換してからそれを否定します。ブール値に変換すると、空の文字列 ('')、NaN、0、null、および未定義はすべて true を返します。 => true 否定は false なので、[] == false になります。

他にも次のような覚えておくべきことがあります:

[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
私はかつてそのようなコードを見たことがあります:

、信じられますか、そのとき赤ちゃんは怖がりました。 (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb

私が初めて JS に触れたとき、まさにその「気まぐれさ」のせいで、私にとって JS は非常に混乱しました。以下にそれを要約しましょう:

7. JS データ型: 数値、ブール値、文字列、未定義、Null、シンボル (es6 で新たに定義)、およびオブジェクト (注: 配列は特別なオブジェクトです)

typeof によって返される 7 つの型: 数値、ブール文字列、オブジェクト、未定義のオブジェクト関数

MDN では、JavaScript を次のように紹介しています。JavaScript は、型付けが弱い、または動的言語です。つまり、変数の型を事前に宣言する必要はなく、プログラムの実行中に型が自動的に決定されます。これは、同じ変数を使用して異なるタイプのデータを保持できることも意味します

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

基本型:

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

^ ^ ^ 「+」演算子: ^ ^ ^ ^

概要: プラス記号演算子を使用する場合、String およびその他の型は String に変換され、それ以外の場合は Number 型に変換されます。 注: 未定義は「NaN」として Number に変換され、NaN に加算される数値は変換されます。 be は NaN です。

他の演算子を使用すると、基本型は文字を含む String 型に変換されます ('1a'、'a1' など)。これは、未定義と同じ NaN に変換されます。

ヒント: (1) NaN は、それ自体を含め、どの値とも等しくないため、値が NaN であるかどうかを判断するには、「! ==」を使用します。

^ ^ ^ ^ (2) ブール型 false への変換には、null、0、''、未定義、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';
  }
};

  总结: Number类型会先调用valueOf(), String类型会先调用toString(),  如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误; 

为什么 {} + [] = 0 ?  因为 javascript在运行时, 将 第一次{} 认为是空的代码块,所以就相当于 +[] = 0.  还有 {} +5 = 5, 同理。

总结:

1. 类型错误有可能会被类型转换所隐藏。

2. “+”既可以表示字符串连接,又可以表示算术加,这取决于它的操作数,如果有一个为字符串的,那么,就是字符串连接了。

3. 对象通过valueOf方法,把自己转换成数字,通过toString方法,把自己转换成字符串。

4.具有valueOf方法的对象,应该定义一个相应的toString方法,用来返回相等的数字的字符串形式。

5.检测一些未定义的变量时,应该使用typeOf或者与undefined作比较,而不应该直接用真值运算。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:



以上がJS における暗黙的な変換の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。