搜索
您的当前位置:首页正文

js中数据类型转换汇总

来源:哗拓教育

js的数据类型分为

    [基本数据类型]

        数字 number

        字符串 string

        布尔 boolean

        空 null

        未定义 undefined

    [引用数据类型]

        对象 object

            普通对象

            数组对象(Array)

            正则对象 (RegExp)

            日期对象(Date)

            数学函数 (Math)

            ...

        函数 function

真实项目中,根据需求,我们往往需要把数据类型之间进行转换

### 把其他类型转换未number类型

```1.发生的情况

-isNaN检测的时候:当检测的值不是数字类型,浏览器会自己调用number方法把它先转换未数字,然会在检测是否未非有效数字

isNaN('3') => false

Number('3') => 3

isNaN(3) => false

isNaN('3px') =>true

Number('3') => NaN

isNaN(NaN) => true

-基于paserInt/parseFloat/Number去除手动转换未数字类型

-数学运算:+ - * / %,但是"+"不仅仅是数学运算,还可能是字符串拼接

'3'-1=>2

Number('3')->3

'3px'-1 =>NaN

'3px'+1 =>'3px1'  //字符串拼接

var i = '3';

i++;    //4    i++就是单纯的数学运算,已经摒弃掉字符串拼接的规则

i+=1;    //'31'

i=i+1;  //'31'

-在基于“==”比较的时候,有时候也会把其他值转换为数字类型

-...

2.转换规律:

//=》转换的方法:Number(浏览器自行转换都是基于这个方法完成的)

【把字符串转数字】

    只要遇到一个非有效数字字符,结果就是NaN

【把布尔转换未数字】

    true -> 1

    false -> 0

【把没有转换未数字】

    '' -> 0

    ' ' -> 0  空格(space)

    '\n' -> 0 换行符(Enter)

    '\t' -> 0 制表符(Tab)

    null -> 0

    undefined => NaN

    [把引用类型值转换围殴数字]

        首先都先转换为字符串(toString),然后在转换未数字(Number)

```

### 把其他类型值转换未字符串

```1.发生的情况:

-基于alert/confirm/prompt/document.write等方法输出内容的时候,会把输出的值转换未字符串,然后再输出

    alert(1) => '1'

-基于“+”进行字符串拼接的时候

-把引用类型值转换为数字的时候,首先会转换为字符串,然会在转换为数字

-给对象设置属性名,如果不是字符串,首先转换为字符串,然后在当作属性存储到对象中(对象的属性只能是数字或者字符串)

-手动调用toSting/toFixed/join/String等方法的时候,也是为了转换为字符串

    var n = Math.PI.toFixed(2) => '3.14';

    [12,23,34].join('+')  => '12+23+34'

2.转换规律

//=>调用的方法:toSring

    【除了对象,都是你理解的转换结果】

    1 => '1'

    NaN => 'NaN'

    true => 'true'

    null => 'null'

    undefined => 'undefined'

    [] => ''

    [12] => '12'

    [12,23] => '12,23'

    (function(){}) => 'function(){}'

【除了对象,都是你理解的转换结果】

    {name:'xxx'} -> '[object object]'

    {} -> '[object object]'

    不管是啥样的普通函数,最后结果都一样

```

### 把其他值转换为布尔值

```1.发生的情况:

-基于!/!!/Boolean等方法转换

-条件判断中的条件最后都会转换为布尔类型

    if(n){}

    if('3px'+2){}

2.转换规律

    只要“0/NaN/''/null/undefined”五个字转换为布尔值false,其余的都是转换围殴true

```

### 特殊情况:数学运算和字符串拼接“+”

```

//=>当表达式中出现字符串,就是字符串拼接,否则就是数学运算

    1+true=2 => 数学运算

    '1'+true => '1true' 字符串拼接

    [12]+10 => '1210'  //虽然没有看见字符串,但是引用类型转换为数字,首先会转换为字符串,所以变为了字符串拼接

    ({})+10 => "[object object]10"

    []+10 => '10'

    {}+10 => 10 这个和以上说的没有半毛钱关系,因为他根本就不是数学运算,也不是字符串拼接,它是两部分代码

        {} 代表一个代码块,

        +10 才式我们的操作

        严格写法: {}; +10;

   {}+[] =0

    {}+false =0

    {}+true=1

    {}+{} = '[object object][object object]'

```

思考题

```

12+true+fase+null+undefined+[]+'珠峰'+null+undefined+[]+true  //"NaN珠峰nullundefinedtrue"

    12+true+fase+null = 13

    undefined // NaN

    13+NaN = NaN

    NaN+[] = NaN;

    NaN+'珠峰' = 'NaN珠峰nullundefined"

    []  = ''

    'NaN珠峰nullundefined'+''+true

    "NaN珠峰nullundefinedtrue"

```

### 特殊情况: ”==“在进行比较的时候,如果足有两边的数据类型不一样,则先转为相同的类型,在进行比较

对象==对象: 不一定相等,因为对象操作的是引用地址,地址不相同,则不相等

```

{name:'xxx'} = {name:'xxx'} =>false

[] == [] =>false

var obj1 = {};

var obj2 = obj1;

obj1 == obj2 => true

======对象跟对象比较,比较的是地址  ![]/!{} 

!对象 = !对象的地址(地址不是空) !对象=false

对象==数字:把对象转换为数字

对象==布尔:把对象转换为数字,把布尔叶转换为数字

对象==字符串:把对象转换为数字,把字符串也转换为数字

字符串==数字:字符串转换围为数字

字符串==布尔:都转换为数字

布尔==数字:把布尔转换为数字

1==true  => true

1==false => false

2==true  => false  //这是是把true变为数字1

=====不同情况的比较,都是把其他值转换为数字,然后在进行比较

null == undefined  => true

null ==null  // true

undefined == undefined //true

null === undefined => false

null&&undefined和其他值都不想等

NaN==NaN : false

NaN和谁都不相等

[] == []  =>false

[] (0)== true(1) => false  都转换为数字 0==1

![] == true :false  先算![],把数组转换为布尔取反为false => false==true

[] == false : true 都转换为数字 0==0

![](false) == false => true  先算![],把数组转换为布尔取反=> false =>false==false

js数据类型比较面试题: 

Top