Hello,大家好。很多前端面试的试题都会考到其他类型到数值类型的转换。特别是在隐式转换的时候会特别的多,现在我们就对这一点进行讨论:

其他类型转换为数值类型的值大致分为4种情况:

(1)基本类型的参数转换为数值:

基本类型转换为数值其实很简单也很基础但是需要加强记忆:

null:0

undefined:NAN

数值:保持不变

true:1

flase:0

string:类似于使用Number的方法将字符串转换为数值,即数值的字符串形式可以正确的转换为数值其他的则会转换为NAN。

js 数据 类型 判断_js typeof 类型_js数据类型

(2)正常对象类型转换为数值

正常对象转换为数值首先将会进行是否toString的方法转换为基本的数据类型,然后再使用ToNumber的方法转换为数值js数据类型,比如:

[]: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″,再将其转换为数值12.

(4)定义toString方法的方法的对象

js typeof 类型_js 数据 类型 判断_js数据类型

对于对象具有toString方法,将会调用toString方法,并对toString方法的返回值进行转换参考上述的(1)和(2)。

比如对象的toString方法为的返回值为字符串”789″,定义对象a={a:”jkdgh”}。进行转换为数值时根据得到的返回值为”789″,再将其转换为数值789.

(5)由于对象的valueof方法和toString方法都会影响对象转换为数值的结果,现在对对象同时定义valueof方法和toString方法进行查看两者的优先级。

定义valueof方法返回字符串12js数据类型,定义toString方法返回字符串”789″,得到的对象的值为12,所有valueof的优先级高于toString,在有valueof的情况下优先使用valueof。

例子如下:

js typeof 类型_js 数据 类型 判断_js数据类型

Object.prototype.valueOf=function(){return “12”}

Object.prototype.toString=function(return “789”)

a={a:4}

a:4}

当使用+a强制把对象a转换为整数时得到的数据为12.

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410