JavaScript對象類型轉(zhuǎn)換的分類及步驟詳解
對象類型轉(zhuǎn)換時的分類
對象轉(zhuǎn)換時先要確定轉(zhuǎn)換的類型,這個類型在對象的[Symbol.toPrimitive]屬性值-函數(shù)的參數(shù)中可以拿到,一共有三種:
- string
- number
- default
string以下兩種情況會將確定對象的轉(zhuǎn)換類型為string:
- 使用
alert(person) - 將對象看做是一個對象的屬性來取值時,例如
family[person]
number以下兩種情況會將確定對象的轉(zhuǎn)換類型為number:
- 使用一元數(shù)學操作符,例如
alert(+person) - 使用比較運算符,例如
alert(person > 1)
default其他情況會確定對象的轉(zhuǎn)換類型為default:
- 相加操作,例如
alert(obj + 1) - 相等比較,例如
alert(obj == 2)
對象轉(zhuǎn)換時的步驟
- 先看對象內(nèi)有沒有
[Symbol.toPrimitive]屬性 - 如果有,則執(zhí)行該方法
- 如果沒有,則檢查對象要轉(zhuǎn)換的類型
- 如果是string,執(zhí)行
toString()或valueOf()方法,如果其中一種存在的話 - 如果是number,執(zhí)行
valueOf()或toString()方法,如果其中一種存在的話 - 如果是default,執(zhí)行
valueOf()或toString()方法,如果其中一種存在的話
下面是幾個例子
有[Symbol.toPrimitive]屬性
let obj = {
name: 'jack',
money: 1,
[Symbol.toPrimitive](hint) {
console.log(hint);
return hint == 'string' ? this.name : this.money;
},
};
let person = {
jack: 'property jack',
};
// hint equals to string
alert(obj); // jack
alert(person[obj]) // property jack
// hint equals to number
alert(+obj); // 1
alert(obj > 0); // true
// hint equals to default
alert(obj + 50); // 51- 沒有
[Symbol.toPrimitive]屬性
let obj = {
name: 'jack',
money: 1,
};
// hint equals to string, excutes the toString() and return [object object]
alert(obj); // [object object]
// hint equals to number, excutes the valueOf() and return the object itself
alert(+obj); // NaN
// hint equals to default, excutes the valueof() and return the object itself
alert(obj === obj); // true // do the same as (obj.valueOf() === obj);必須返回一個基礎(chǔ)類型
無論是調(diào)用哪個函數(shù),他都必須返回一個基本數(shù)據(jù)類型,如果返回的不是基本數(shù)據(jù)類型,在嚴格模式下會報錯
存在顯示的toString方法
存在顯示聲明的toString()方法,并且不存在其他類型轉(zhuǎn)換方法,例如valueOf()或者[Symbol.toPrimitive],則無論對象是按照什么類型轉(zhuǎn)換,都執(zhí)行toString()方法。(存在顯示的toString,則只找toString,不找valueOf)
// if there exsits a toString(), and no other functions such as valueOf() or [symbol.toPromitive], then all the conversions will excute toString()
let obj = {
name: 'jack',
money: 1,
toString() {
return this.money;
},
};
alert(obj); // 1
alert(+obj); // 1
alert(obj + 9); // 10先確定對象是按照什么類型轉(zhuǎn)換,一共有三種類型:
- string
- number
- default
轉(zhuǎn)換規(guī)則:
- 先看對象內(nèi)有沒有
[Symbol.toPrimitive]屬性 - 如果有,則執(zhí)行該方法
- 如果沒有,則檢查對象要轉(zhuǎn)換的類型
- 如果是string,執(zhí)行
toString()或valueOf()方法,如果其中一種存在的話 - 如果是number,執(zhí)行
valueOf()或toString()方法,如果其中一種存在的話 - 如果是default,執(zhí)行
valueOf()或toString()方法,如果其中一種存在的話
翻譯自原文:https://javascript.info/objec...
以上就是JavaScript對象類型轉(zhuǎn)換的分類及步驟詳解的詳細內(nèi)容,更多關(guān)于JavaScript對象類型轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript獲取網(wǎng)頁的寬高及如何兼容詳解
這篇文章主要給大家介紹了關(guān)于JavaScript獲取網(wǎng)頁的寬高及如何兼容的相關(guān)資料,主要介紹了三個方式,分別是window.innerWidth / window.innerHeight、document.documentElement.clientWidth以及混雜模式/怪異模式 下的寬高的獲取,需要的朋友可以參考下2021-05-05
js實現(xiàn)用戶離開頁面前提示是否離開此頁面的方法(包括瀏覽器按鈕事件)
這篇文章主要介紹了js實現(xiàn)用戶離開頁面前提示是否離開此頁面的方法,較為詳細的分析了javascript針對瀏覽器事件的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07

