JavaScript中的数据类型转换

显式类型转换

1,Number()

  • 基本数据类型
  1. 数字即本身。
  2. 字符串,如果是纯数字,则直接转化为数字;如果不是纯数字,则转换为NaN;如果是空字符串,则转化为0;
  3. 布尔值,true转化为1;false转化为0;
  4. undefined转化为NaN
  5. null转化为0
  • 引用数据类型
  1. 先调用对象的valueOf()方法,如果返回的是基本数据类型,则调用Number()方法,结束。
  2. 先调用对象的valueOf()方法,如果返回的是复合数据类型,则继续调用toString()方法,这时如果返回的是基本数据类型,则调用Number()方法,结束。
  3. 先调用对象的valueOf()方法,如果返回的是复合数据类型,则继续调用toString()方法,这时如果返回的不是基本数据类型,则报错。

 

2,String()

  • 基本数据类型
  1. 数字转化为字符串。
  2. 字符串为本身。
  3. 布尔值,true转化为'true';false转化为'false';
  4. undefined 转化为 'undefined';
  5. null 转化为 'null';
  • 引用数据类型
  1. 先调用对象的toString()方法,如果返回的是基本数据类型,则调用String()方法,结束。
  2. 先调用对象的toString()方法,如果返回的是复合数据类型,则继续调用对象的valueOf()方法,这时如果返回的是基本数据类型,则调用String()方法,结束。
  3. 先嗲用对象的toString()方法,如果返回的是复合数据类型,则继续调用对象的valueOf()方法,这时如果返回的不是基本数据类型,则报错。    

 

3,Boolean()

  只需记得几项为false的值,其他都为true。

  • +0
  • -0
  • ''
  • false
  • NaN
  • undefined
  • null

 

隐式类型转换

  • 四则运算
  1. 如果是加法和字符串同时出现时,会成为字符串拼接。
  2. 如果是其他情况的+-*/,则将不是number类型的数据通过Number()转化,转化完成再进行数学运算。

 

  • ==
  1. 出现不同类型的数据比较,将不是number类型的数据通过Number()转换,再进行判断。
  2. 特别注意:undefined == null 返回的是true

 

  • 判断语句
  1. 将所有判断语句内的结果进行Boolean()转化。
  2. 三目运算符

 

  • 逻辑运算
  1. &&,将两边的数据进行Boolean()转换,返回从左往右第一个false的值。如果全为true,则返回最后一个值。
  2. ||,将两边的数据进行Boolean()转换,返回从左往右第一个true的值,如果全为false,则返回最后一个值。

 

  • Native调用
  1. console.log()会将输入调用String()方法,返回字符串。
  2. alert()会将输入调用String()方法,返回字符串。

 

常见题目

  • [] + []  //''
  • [] + {}  //"[object Object]"
  • {} + []  //0,这里将{}看成了空代码块,直接无视了,变成+[]
  • {} + {}  //这里的答案在chrome和firefox中的执行结果不同,firefox会将前面的{}看成空代码块,并无视它成为+{},值为NaN;在chrome中执行,值为"[object Object][object Object]",(具资料显示,chrome用的是eval()方法进行解读的。nodejs环境中值为"[object Object][object Object]")
  • true + true  //2
  • 1 + {a:1}  //"1[object Object]"
  • undefined == null  //true
posted @ 2019-01-31 09:58  骨子里的钟  阅读(259)  评论(0编辑  收藏  举报