" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JavaScript對(duì)象轉(zhuǎn)原始值

 更新時(shí)間:2021年12月10日 15:43:34   作者:周曉風(fēng)  
這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

Object.prototype.valueOf()

對(duì)象的valueOf旨在返回對(duì)象的原始值,會(huì)在需要將對(duì)象轉(zhuǎn)換成原始值的地方自動(dòng)執(zhí)行。詳細(xì)點(diǎn)這里。

Object.prototype.toString()

toString()方法會(huì)返回表示該對(duì)象的字符串,會(huì)在對(duì)象預(yù)期要被轉(zhuǎn)換成字符串的地方自動(dòng)執(zhí)行。對(duì)象默認(rèn)的toString()方法會(huì)返回[object type],這個(gè)type就是對(duì)象構(gòu)造函數(shù)的名稱(chēng)。詳細(xì)點(diǎn)這里。

Symbol.toPrimitive

Symbol.toPrimitive(hint)方法作用同valueOf()一樣,但是優(yōu)先級(jí)要高于valueOf();而且該方法還會(huì)接受一個(gè)參數(shù)hint,這個(gè)參數(shù)用來(lái)表示期望轉(zhuǎn)換的原始值的具體類(lèi)型,有以下幾種:

  • number:數(shù)字類(lèi)型
  • string:字符串類(lèi)型
  • default:默認(rèn)
let obj = {
  [Symbol.toPrimitive](hint) {
    switch (hint) {
      case 'number':
        return 123;
      case 'string':
        return 'str';
      case 'default':
        return 'default';
      default:
        throw new Error();
     }
   }
};
2 * obj // 246
3 + obj // '3default'
obj == 'default' // true
String(obj) // 'str'

對(duì)象轉(zhuǎn)換原始值

以上三種方法都是在對(duì)象被預(yù)期轉(zhuǎn)換成某種原始值時(shí)觸發(fā)。

1. 預(yù)期被轉(zhuǎn)換成字符串類(lèi)型

對(duì)應(yīng)的hint類(lèi)型為string

進(jìn)行輸出的地方,如alert()

String(obj)

let a = {
  toString () {
    return '2'
  }
}
console.log(String(a)) // 2

字符串連接(+)操作

let a = {
  toString () {
    return '2'
  }
}
console.log(a + 'vv')

模板字符串

let a = {
  [Symbol.toPrimitive] (hint) {
    console.log(hint) // string
    return 2
  }
}
console.log(`你是老${a}?`) // 你是老2?

2. 預(yù)期被轉(zhuǎn)換成數(shù)字類(lèi)型

對(duì)應(yīng)的hint類(lèi)型為numbe

除法:

let a = {
  valueOf () {
    return 2
  }
}
console.log(2 / a, a / 2) // 1  1

Number(obj):

let a = {
  [Symbol.toPrimitive] (hint) {
    console.log(hint) // number
    return 2
  }
}
console.log(Number(a)) // 2

正負(fù)號(hào)(注意不是加減運(yùn)算):

let a = {
  [Symbol.toPrimitive] (hint) {
    console.log(hint) // number
    return 2
  }
}
console.log(+a) // 2
console.log(-a) // -2

3. 預(yù)期被轉(zhuǎn)換成默認(rèn)類(lèi)型(其他)

對(duì)應(yīng)的hint類(lèi)型為default

數(shù)字加法(即與對(duì)象相加的一方為數(shù)字類(lèi)型):

let a = {
  [Symbol.toPrimitive] (hint) {
    console.log(hint) // default
    return 2
  }
}
console.log(1 + a) // 3

這一點(diǎn)有點(diǎn)意外,原以為像這種情況預(yù)期轉(zhuǎn)換的類(lèi)型應(yīng)該是數(shù)字類(lèi)型,但事實(shí)上卻是default;

布爾運(yùn)算:所有對(duì)象都被轉(zhuǎn)換成true;

let a = {
  [Symbol.toPrimitive] (hint) {
    console.log(hint) // 沒(méi)有觸發(fā)
    return false
  }
}
console.log(Boolean(a), a && 123) // true 123

布爾運(yùn)算包括==

三種方法觸發(fā)的順序

首先判斷對(duì)象是否有Symbol.toPrimitive(hint)方法,若有則執(zhí)行該方法,沒(méi)有則執(zhí)行下面的步驟;

如果預(yù)期被轉(zhuǎn)換成字符串類(lèi)型時(shí),則優(yōu)先執(zhí)行toString()方法;

如果預(yù)期被轉(zhuǎn)換成默認(rèn)類(lèi)型或者數(shù)字類(lèi)型時(shí),則優(yōu)先執(zhí)行valueOf()方法:

:若沒(méi)有valueOf()方法,但是定義了toString()方法,則會(huì)執(zhí)行toString()方法;

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

最新評(píng)論