javascript中==のデータタイプ変換規則

1534 ワード

  • 値が一つしかないなら、この値が本当かそれともうそかを判断します.0、NaN、null、undefinedの5つはうそです.残りは全部本当です.
  • 二つの値が等しいかどうかを比較すると、この規則に従います.val 1==val 2の値は同じデータタイプではないかもしれません.==比較すると、デフォルトのデータタイプ変換1)オブジェクト==オブジェクトは、永遠に等しくないです.
    2)オブジェクト==文字列は、まず対象を文字列に変換し(toString()メソッドを呼び出してから比較します.)例えば、
    [] == ""  //true,     [].toString()
    ({}) == ""  // false
    ({}.toString())  // "[object Object]"
    [].toString(); // ""
    3)オブジェクト==ブールタイプ、オブジェクトを先に文字列に変換し、文字列を数字に変換します.ブールタイプも数字に変換します.最後に二つの数字を比較させます.
    Number('') // 0
    [] == false // true
    4)オブジェクト==デジタルオブジェクトを先に文字列に変換し、文字列を数字(Number()/[]->>>>>>""05)の数字=ブールを数字(Number()、trueを1に変換します.falseは06)数字==文字列は数字7に変換されます.文字列==ブールは数字8に変換されます.null==undefinedはtrue 9です.nullまたはundefinedは他のデータタイプと同じではありません.NaNは何も等しくありません.==が比較であることを除いて、===も比較(絶対比較)であり、val 1とval 2はデータタイプが違っていれば、決して等しくない.
    つまり、==のデータタイプ変換の基本的な考え方は、文字列を回転させることができますが、文字列を回転させることができます.まだ数字を回転させることができません.ですから、[]==![]はtrueに戻ります.これはオブジェクトタイプとブールタイプの比較です.両方の数字を回転したら0です.
    実際には、これらのデータ変換の法則はあまり役に立たないので、判定などの場合は、データタイプの変換を避けるために、できるだけ===を使用しなければならず、nullとundefinedを判断するときだけ==を使用することができる.
    ちなみに、javascriptの演算子優先度は、高いものから低いものまで、ほぼ次のようになります.
  • 単項演算子(逆を求めて、論理は(!)ではなく、数字(+)、+、-)を回転し、typeof、delete優先度が一番高いです.
  • 乗除/求模;
  • を追加しました

  • =<=>
  • 判定などの演算子(====================);
  •  
  • 割当値を有する優先度が最も低い(=、+=、-=)