JavaScript(三)データタイプの変換

4422 ワード

一、概要
JavaScriptは、動的タイプ言語であり、変数にはタイプ制限がなく、いつでも任意の値var x = y ? 1 : 'a';を付与することができます.変数のデータタイプは不確定ですが、各種演算子はデータタイプに要求があります.演算子の種類が予想に反していると、演算子が自動的にタイプを変換します.例えば、減算演算子は左右の演算子が数値であるべきだと予想されています.そうでないと自動的に数値に変換されます.'4' - '3' // 1二、強制変換
強制変換とは、主にNumber()、String()とBoolean()の3つの関数を使用して、手動で各種の値を数字、文字列、またはブール値に変換します.
2.1 Number()
Number関数を使用して、任意の種類の値を数値に変換できます.
元のタイプの値
//   :         
Number(324) // 324

//    :          ,         
Number('324') // 324

//    :           ,   NaN
Number('324abc') // NaN

//       0
Number('') // 0

//    :true    1,false    0
Number(true) // 1
Number(false) // 0

// undefined:   NaN
Number(undefined) // NaN

// null:  0
Number(null) // 0
Number関数は文字列を数値に変換します.パーrseInt関数よりもはるかに厳しいです.基本的に、1文字があると数値に変換できなくなり、文字列全体がNaNに変換されます.
オブジェクトの簡単な規則は、Numberメソッドのパラメータがオブジェクトの場合、NaNに戻ります.単一の数値を含む配列でない限り、
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
1,オブジェクト自体のvalueOfメソッドを呼び出します.元のタイプの値を返すと、そのまま値にNumber関数を使用して、次のステップを行いません.
2,valueOf方法で戻ってきたものが対象である場合は、呼び出し対象自体のString方法に変更する.String法が元のタイプの値を返すと、この値はNumber関数を使用して、後のステップを行わない.
3,toString方法で戻ってきたのが対象であれば、エラーが発生します.
var obj = {x: 1};
Number(obj) // NaN

//    
if (typeof obj.valueOf() === 'object') {
  Number(obj.toString());
} else {
  Number(obj.valueOf());
}
2.2 String()
String関数は、任意の種類の値を文字列に変換できます.変換規則は以下の通りです.
元のタイプの値
数値:対応する文字列に変換します.文字列:変換後も元の値です.ブール値:trueを文字列「true」に変換し、falseを文字列「false」に変換します.undefined:文字列「undefined」に変換します.null:文字列「null」に変換します.
String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
オブジェクトStringメソッドの背後にある変換規則は、Number方法と基本的に同じであり、valueOf方法とtoString方法の実行順序を交換しただけである.
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
1,まず対象自身のStringメソッドを呼び出します.元のタイプの値を返すと、この値はString関数を用いて以下のステップを行わない.2,toStringメソッドがオブジェクトである場合は、元のオブジェクトのvalueOfメソッドを呼び出します.valueOf法が元のタイプの値を返すと、この値はString関数を用いて以下のステップを行わない.3,もしvalueOf方法で戻ってきたのが対象なら、エラーが発生します.
String({a: 1})
// "[object Object]"

//    
String({a: 1}.toString())
// "[object Object]"
2.3 Boolean()
Boolean()関数は、任意の種類の値をブール値に変換できます.その変換規則は比較的簡単です.次の5つの値の変換結果を除いてfalseです.他の値は全部trueです.
1、undefined 2、null 3、0(-0と+0を含む)4、NaN 5、'(空の文字列)
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
すべてのオブジェクト(空のオブジェクトを含む)の変換結果はtrueであり、falseに対応するブールオブジェクトnew Booleanもtrueである.
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
三、自動変換
次の3つの場合、JavaScriptは自動的にデータタイプを変換します.すなわち、変換は自動的に行われます.ユーザは1、異なるタイプのデータを見ないでお互いに演算します.
123 + 'abc' // "123abc"
2、非ブール値タイプのデータに対してブール値を求める
if ('abc') {
  console.log('hello')
}  // "hello"
3、非数値型の値には1要素演算子(すなわち+と-)を使います.
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN
自動変換のルールは、どのタイプの値が期待されるか、タイプの変換関数を呼び出します.例えば、ある位置が文字列と予想されている場合、Stering関数を呼び出して変換します.この位置が文字列であっても、数値であってもよい場合、デフォルトは数値に変換されます.
ブール値に自動変換
JavaScriptは、if文の条件部分のような、ブール値と予想される場所に遭遇すると、ブール値ではないパラメータを自動的にブール値に変換します.システム内部ではBoolean関数1、undefined 2、null 3、+0または-0 4、NaN 5、'(空の文字列)を自動的に呼び出します.
if ( !undefined
  && !null
  && !0
  && !NaN
  && !''
) {
  console.log('true');
} // true
文字列に自動変換
文字列の自動変換は、主に文字列の加算時に行われます.
'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
自動的に数値に変換
演算子を文字列に変換する場合は、加算演算子(+)以外の演算子は演算子を自動的に数値に変換します.
'5' - '2' // 3
'5' * '2' // 10
true - 1  // 0
false - 1 // -1
'1' - 1   // 0
'5' * []    // 0
false / '5' // 0
'abc' - 1   // NaN
null + 1 // 1
undefined + 1 // NaN
本文の参考:JavaScript教程