JavaScript 學習筆記 - Conversior


Posted by hata0833 on 2022-09-02

https://wangdoc.com/javascript/features/conversion.html

強制轉換

使用 Number() String() Boolean手動轉換

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

和parseInt的區別:parseInt是逐個解析,而Number只要遇到有一個字符不能轉成數,就會被轉為NaN
相同:都會去掉前導和空格

parseInt('42 cats') // 42
Number('42 cats') // NaN

遇到對象

只有包含單個數字的數組可以被轉換,其餘都是NaN

Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

記住對象轉換成基本數據類型的步驟:valueOf() -> toString()
在這裡不必走完,任一有值就可以返回

  1. 在Number中,如果valueOf返回原始類型的值,直接對該值使用Number,然後返回
    譬如Number([5])
  2. 如果valueOf返回對象,就調用toString,返回基本類型的值就進行轉換,然後返回
  3. valueOf()toString() 都返回對象 -> 報錯
var obj = {x: 1};
Number(obj) // NaN

// 等同于
if (typeof obj.valueOf() === 'object') {
  Number(obj.toString());
} else {
  Number(obj.valueOf());
}

String()

和Number差不多

String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"

遇到對象

valueOf() -> toString()

Number()valueOf() / toString()

Boolean

除了五種,其他都是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(false)

出於性能考量,避免對象計算得值

自動轉換

  1. 運算符 +
    123 + 'abc' // "123abc"
    
  2. 對非布爾值求布爾值
    if('abc') {
     console.log('hello')
    } // hello
    // 或是
    !'abc' // false
    !!'abc' // true
    
  3. 對非數值類型使用一元運算符
    一般是轉換正負號
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN

null转为数值时为0,而undefined转为数值时为NaN。


#javascript







Related Posts

Ansible控制Managed node方法

Ansible控制Managed node方法

自己做一個部落格?嗯,我要多一點時間,好讓我再想一想。

自己做一個部落格?嗯,我要多一點時間,好讓我再想一想。

[Week4] JS 實作串接 API(二)

[Week4] JS 實作串接 API(二)


Comments