JS足し算はどれぐらい知っていますか?

2530 ワード

今日は質問を受けました.var a = +[]コンソールを使わないで、どれぐらい話せますか?
反応しませんでした.正しいですか?
どうせ間違えました.ハハハ.
はい、先に結果を発表します.
console.log(+[]) // 0 
console.log(0 + []) // '0'
console.log(0 - []) // 0
console.log([] + []) // ''
console.log({} + []) // '[object Object]'
次によく分析してみます.何の原理ですか?
足し算
1、プラス記号演算子は元のデータタイプにしか使えません.オブジェクトタイプの値に対してはデータ変換が必要です.
2、変換後、元のデータタイプが「文字列」の値である場合、別の演算元は強制的に文字列に変換し、文字列の接続演算を行います.
3、他の場合は、すべての演算元が元のデータタイプの「数」タイプの値に変換され、数値の加算が行われます.
Number()変換規則
  • Boolean値であれば、trueおよびfalseはそれぞれ1および0に変換される.
  • デジタル値であれば、単純な着信とリターンだけです.
  • null値であれば、0を返します.
  • は、undefinedであれば、NaNを返します.
  • 文字列であれば、以下の規則に従います.
       (1)                   ,        ,          `NaN`。 
    
       (2)             (             ),           , “1”  1,“123”   123, “011”   11(        ); 
    
       (3)                , “1.1”,             (         ); 
    
       (4)                  ,   `0xf`,                  ; 
    
       (5)         (       ),       0; 
    
       (6)                   ,        `NaN`。
    
  • オブジェクトであれば、オブジェクトのvalueOf()方法を呼び出し、前の規則に従って戻り値を変換する.変換の結果がNaNである場合は、オブジェクトのtoString()方法を呼び出し、再び前の規則に従って文字列値を変換する.
  • console.log(Number(undefined)) // NaN
    console.log(Number(null)) // 0
    console.log(Number(NaN)) // NaN
    console.log(Number('')) // 0
    console.log(Number({})) // NaN
    console.log(Number({a:1})) // NaN
    console.log(Number([])) // 0
    console.log(Number([1])) // 1
    console.log(Number([1,2])) // NaN
    
    console.log(String(undefined)) // 'undefined'
    console.log(String(null)) // 'null'
    console.log(String(NaN)) // 'NaN'
    console.log(String({})) // '[object Object]'
    console.log(String({a:1})) // '[object Object]'
    console.log(String([])) // ''
    console.log(String([1])) // '1'
    console.log(String([1,2])) // '1,2'
    分析
  • +[][]は対象であり、第6条の規則に従って変換された結果はNaNであり、次いで対象のtoString()方法を呼び出して''空の文字列を得てNumber('') => 0であるため、+[] => 0、結果は数字0
  • である.
  • 0 + []を得て、0 + '' => '0'を得て、結果は文字列0
  • です.
  • {} + []を得て、'[object Object]' + '' => '[object Object]'を得て、結果は文字列[object Object]
  • です.
    その他はこの類推によって得られます.
    分かりましたか