大家好。很多前端面试题都会测试其他类型到数值类型的转换。尤其是涉及到隐式转换的时候,我们现在就来讨论一下:
从其他类型转换为数值类型的值大致分为4种情况:
(1)原始类型的参数转换为数值:
基本类型到数字的转换其实很简单基本,但是需要加强记忆:
null:0
未定义:NAN
值:保持不变
真:1
闪光:0
string:类似于使用Number将字符串转换为数值,即数值的字符串形式可以正确转换为数值,其他的都会转换为NAN。
(2)普通对象类型转数值
将普通对象转换为值会先将toString方法转换为基本数据类型,然后再使用ToNumber方法将其转换为值,如:
[]:0
[3]:4
[1,2,3] 首先转换为字符串为 1,2,3,然后转换为数字 NAN
{}转换为“Object object”形式的字符串,再转换为数值NAN
(3)定义valueof方法的对象
对于有valueof方法的对象,会调用valueof方法,并转换valueof方法的返回值。参考上面的(1)和(2).
比如对象的vlaueof方法的返回值是字符串“12”,它定义了对象a={a:”jkdgh”}。转换为值时,根据返回值“12”js判断是否是英语数字js判断是否是英语数字,将其转换为值12.
(4)定义toString方法的方法的对象
对于带有 toString 方法的对象,会调用 toString 方法,并转换 toString 方法的返回值。参考上面的(1)和(2).
例如对象的toString方法的返回值为字符串“789”,对象定义为a={a:”jkdgh”}。转换为数值时,返回值为“789”,再转换为数值789.
(5)因为对象的valueof方法和toString方法都会影响对象转数值的结果,现在在对象上定义valueof方法和toString方法来检查优先级两者都有。
定义valueof方法返回字符串12,定义toString方法返回字符串“789”,获取到的对象的值为12,所有valueof的优先级都高于toString,有时优先使用valueof是值。
示例如下:
Object.prototype.valueOf=function(){return “12”}
Object.prototype.toString=function(return “789”)
a={a:4}
a:4}
当使用+a强制将对象a转换为整数时,得到的数据为12.
请登录后发表评论
注册
社交帐号登录