JavaScript 基础学习之 其他数据类型转换为数字类型

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

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

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

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

null:0

undefined:NAN

数值:保持不变

true:1

flase: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",再将其转换为数值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的情况下优先使用valueof。

例子如下:

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

Object.prototype.toString=function(return "789")

a={a:4}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章