JavaScript學習總結(jié)(3) —— 類型轉(zhuǎn)換

3. 類型轉(zhuǎn)換

JS中類型轉(zhuǎn)換只有三種情況,分別是

  • 轉(zhuǎn)換為布爾值 【 Boolean()】
  • 轉(zhuǎn)換為數(shù)字 【 Number()、parseInt()、parseFalse() 】
  • 轉(zhuǎn)換為字符串【 String() 、str.toString() 】

3.1 轉(zhuǎn)Boolean

在條件判斷時,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都轉(zhuǎn)為 true,包括所有對象。

3.2 對象轉(zhuǎn)基本類型

  1. 對象在轉(zhuǎn)換基本類型時,首先會調(diào)用valueOf 然后調(diào)用toString。并且這兩個方法你是可以重寫的。
  2. 調(diào)用哪個方法,主要是要看這個對象傾向于轉(zhuǎn)換為什么。如果傾向于轉(zhuǎn)換為 Number 類型的,就優(yōu)先調(diào)用 valueOf;如果傾向于轉(zhuǎn)換為 String 類型,就只調(diào)用 toString
var obj = {
  toString () {
    console.log('toString')
    return 'string'
  },
  valueOf () {
    console.log('valueOf')
    return 'value'
  }
}

alert(obj) // string
console.log(1 + obj) // 1value
  1. 如果重寫了 toString 方法,而沒有重寫 valueOf 方法,則會調(diào)用 toString 方法
var obj = {
  toString () {
    return 'string'
  }
}

console.log(1 + obj) // 1string

調(diào)用上述兩個方法的時候,需要 return 原始類型的值 (primitive value),如果在調(diào)用 valueOf 的時候,返回的不是原始類型的值,就會去調(diào)用 toString。

var obj = {
  toString () {
    console.log('toString')
    return 'string'
  },
  valueOf () {
    console.log('valueOf')
    return {}
  }
}

console.log(1 + obj)

// 依次打印出
valueOf
toString
1string

如果返回還不是原始的值,就會報錯

var obj = {
  toString () {
    console.log('toString')
    return {}
  },
  valueOf () {
    console.log('valueOf')
    return {}
  }
}

console.log(1 + obj)

// 報錯。無法將一個對象轉(zhuǎn)換為原始類型的值
Uncaught TypeError: Cannot convert object to primitive value

當然你也可以重寫 Symbol.toPrimitive ,該方法在轉(zhuǎn)基本類型時調(diào)用優(yōu)先級最高。

var obj = {
  toString () {
    console.log('toString')
    return {}
  },
  valueOf () {
    console.log('valueOf')
    return {}
  },
  [Symbol.toPrimitive] () {
    console.log('primitive')
    return 'primi'
  }
}

console.log(1 + obj) // 1primi

同樣只能 return 原始類型的值,否則會報和上面所說一樣的錯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ??引用類型的值(對象)是引用類型的一個實例。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,219評論 0 1
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,677評論 0 4
  • 1、js數(shù)據(jù)類型 js中有7種數(shù)據(jù)類型,可以分為兩類:原始類型、對象類型: 基礎類型(原始值): Undefine...
    好奇男孩閱讀 9,993評論 1 16
  • 強制轉(zhuǎn)換 強制轉(zhuǎn)換主要指使用Number、String和Boolean三個構(gòu)造函數(shù),手動將各種類型的值,轉(zhuǎn)換成數(shù)字...
    燈火闌珊Zone閱讀 530評論 0 3
  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,513評論 0 21

友情鏈接更多精彩內(nèi)容