JavaScript对象类型转换的分类及步骤详解
作者:DongL
这篇文章主要为大家介绍了JavaScript对象类型转换的分类及步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
对象类型转换时的分类
对象转换时先要确定转换的类型,这个类型在对象的[Symbol.toPrimitive]
属性值-函数的参数中可以拿到,一共有三种:
- string
- number
- default
string以下两种情况会将确定对象的转换类型为string:
- 使用
alert(person)
- 将对象看做是一个对象的属性来取值时,例如
family[person]
number以下两种情况会将确定对象的转换类型为number:
- 使用一元数学操作符,例如
alert(+person)
- 使用比较运算符,例如
alert(person > 1)
default其他情况会确定对象的转换类型为default:
- 相加操作,例如
alert(obj + 1)
- 相等比较,例如
alert(obj == 2)
对象转换时的步骤
- 先看对象内有没有
[Symbol.toPrimitive]
属性 - 如果有,则执行该方法
- 如果没有,则检查对象要转换的类型
- 如果是string,执行
toString()
或valueOf()
方法,如果其中一种存在的话 - 如果是number,执行
valueOf()
或toString()
方法,如果其中一种存在的话 - 如果是default,执行
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);
必须返回一个基础类型
无论是调用哪个函数,他都必须返回一个基本数据类型,如果返回的不是基本数据类型,在严格模式下会报错
存在显示的toString方法
存在显示声明的toString()
方法,并且不存在其他类型转换方法,例如valueOf()
或者[Symbol.toPrimitive]
,则无论对象是按照什么类型转换,都执行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
先确定对象是按照什么类型转换,一共有三种类型:
- string
- number
- default
转换规则:
- 先看对象内有没有
[Symbol.toPrimitive]
属性 - 如果有,则执行该方法
- 如果没有,则检查对象要转换的类型
- 如果是string,执行
toString()
或valueOf()
方法,如果其中一种存在的话 - 如果是number,执行
valueOf()
或toString()
方法,如果其中一种存在的话 - 如果是default,执行
valueOf()
或toString()
方法,如果其中一种存在的话
翻译自原文:https://javascript.info/objec...
以上就是JavaScript对象类型转换的分类及步骤详解的详细内容,更多关于JavaScript对象类型转换的资料请关注脚本之家其它相关文章!