数据类型转换

118 阅读2分钟

数据类型转换

1. 把其他数据类型转换为 Number 类型

  1.特定需要转换为Number的

    + Number([val])

    + parseInt/parseFloat([val])

  2.隐式转换(浏览器内部默认要先转换为Number在进行计算的)

    + isNaN([val])

    + 数学运算(特殊情况:+在出现字符串的情况下不是数学运算,是字符串拼接)

    + 在==比较的时候,有些值需要转换为数字再进行比较

    + ...

2. 把其它数据类型转换为字符串

1. 能使用的办法

  + toString()

  + String()

2. 隐式转换(一般都是调用其toString)

  + 加号运算的时候,如果某一边出现字符串,则是字符串拼接

  + 把对象转换为数字,需要先toString()转换为字符串,再去转换为数字

  + 基于alert/confirm/prompt/document.write...这些方式输出内容,都是把内容先转换为字符串,然后再输出的

** 拓展:对象在做数学运算的时候 **

  1. 检测对象的 Symbol.toPrimitive 这个属性值,如果有则基于这个值进行运算,如果没有

  2. 检测对象的 valueOf() 这个值「原始值:基本类型值」,如果有则基于这个值进行运算,如果不是原始值

  3. 获取对象的 toString() 把其变为字符串 -> 如果是‘+’处理,则看到字符串了,所以变为字符串拼接

  4. 如果最后就是想变为数字,则再把字符串转换为数字即可

例如

let n = "10",
  m = 10;
console.log(10 + n); // “+”有一边出现了字符串「前提:有两边」会变为字符串拼接 ‘1010’
console.log(+n); // “+”只有一边,把值转换为数字  10
console.log(++n); // “++”和上面一样也是转换为数字,但是还会自身累加一   11
let obj = {};
console.log(10 + obj); //->'10[object Object]'

3. 把其它数据类型转换为布尔

1. 基于以下方式可以把其它数据类型转换为布尔

  + ! 转换为布尔值后取反

  + !! 转换为布尔类型

  + Boolean([val])

2. 隐式转换
 
 + 在循环或者条件判断中,条件处理的结果就是布尔类型值

规则:只有 ‘0、NaN、null、undefined、空字符串’ 五个值会变为布尔的 FALSE,其余都是 TRUE

4.在==比较的过程中,数据转换的规则:

【类型一样的几个特殊点】

  1. {}=={}:false 对象比较的是堆内存的地址

  2. []==[]:false

  3. NaN==NaN:false

【类型不一样的转换规则】

  1. null==undefined:true,但是换成===结果是 false(因为类型不一致),剩下 null/undefined 和其它任何数据类型值都不相等

  2. 字符串==对象 要把对象转换为字符串

  3. 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较

例如

let result = 10 + false + undefined + [] + "Tencent" + null + true + {};
console.log(result); //result="NaNTencentnulltrue[object,object]"