javascript考点 —— 类型转换

一、数据类型

最新的ECMAScript标准定义了7种数据类型

基本数据类型:Boolean、Null、Undefined、Number、String、Symbol

引用数据类型:Object

二、显式类型转换

显示调用:Number函数、String函数、Boolean函数。

1、Number函数

数值:转换后还是原来的值。

字符串:如果可以被解析,则转换为相应的数值,否则得到NaN。空字符串转换为0。

布尔值:true转换为1,false转换为0。

undefined:转换为NaN。

null:转换成0。

console.log(Number(324))            //324
console.log(Number('324'))          //324
console.log(Number('324abc'))       //NaN 
console.log(Number(''))             //0
console.log(Number(undefined))      //NaN
console.log(Number(false))          //0
console.log(Number(true))           //1
console.log(Number(null))           //0

对象:先调用对象自身的valueOf方法,如果带方法返回原始类型的值(数值、字符串、布尔值),则直接对该值使用Number方法,不再进行后续步骤。如果valueOf方法返回符合类型的值,再调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不再进行后续步骤。如果toString方法返回的符合类型的值,则报错。

var a = {a:1}
console.log(Number(a))
//转换为NaN的过程,首先调用a.value(),结果是{a:1},不是基本数据类型,然后接着调用a.toString(),结果是"[Object Object]",然后字符串转换为NaN

2、String类型

数值:转为相应的字符串。

字符串:转换后还是原来的值。

布尔值:true转换为“true”,false转换为“false”。

undefined:转换为"undefined"。

bull:转换为"null"。

console.log(String(123))     //"123"
console.log(String('abc'))   //"abc"
console.log(String(true))    //"true"
console.log(String(undefined))   //"undefined"
console.log(String(null))        //"null"

对象:先调用toString方法,如果该方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。如果toString方法返回的是符合类型的值,再调用valueOf方法,如果vlaueOf方法返回的是原始类型的值,则对该值使用String方法,不再进行一下步骤。如果valueOf方法返回的是复合类型的值,则报错。

var b = {
    a:1
}
console.log(String(b))   //
//先调用b.toString()方法,然后得到"[Object Object]",返回的是String类型,然后它就不再向后继续调用。


var c = {
    a:1,
    toString:function(){
        return {
            b: 2
        }
    },
    valueOf:function(){
        return 'b'
    }
}
console.log(String(c))    //'b'
//先调用c.toString()方法,返回的不是原始数据类型,接着调用valueOf()方法,返回的是原始数据类型,然后就输出'b',如果去掉valueOf()方法,则会报错

3、Boolean函数

undefined、null、-0、+0、NaN、""(空字符串)          转换后的结果都为false。除了前面的几个,其他都为true。

三、隐式类型转换

1、四则运算

2、判断语句

3、Native调用

4、常见的题目

{} + {} firforx的结果是NaN,他把{}当作代码块处理的。{} + []这里的结果是0,不论是chrom还是firforx都把{}当作了代码块。

5、typeof

猜你喜欢

转载自blog.csdn.net/zhanghuali0210/article/details/82381096