关于js的类型转换(强制类型和隐式类型)

2017-03-09  本文已影响142人  程小E

转 boolean 规则:

null, undefined, "", 0, -0, NaN 转换成布尔值是false, 剩下的全转化 true;

转 number 规则:

string '2.3.1' => NaN;

undefined => NaN;

null, '', false, [] ==> 0;

object => x Number(object.toString())

隐式类型转换(是==引起的转换)

  1. 对象和布尔值比较

对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false
[]转换为字符串'',然后转换为数字0,true转换为数字1,所以为false

  1. 对象和字符串比较

对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;

3、对象和数字比较

[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true

4、 字符串和数字比较

字符串和数字进行比较时,字符串转换成数字,二者再比较。
'1' == 1 // true

Paste_Image.png

来看一个有趣的题

[] == false;
![] == false;

  1. [] == false; //true这里是因为==符号会把两边的类型转换成一样的。这里会转成number[] == 0 // 把false转为number"" == 0 // 用array的valueOf/toString获取基本类型0 == 0 // 空字符串转成数字之后是0,Number('')

2.![] == false; //truejavascript中所有对象都是true。!true == false // []也是object,所以是truefalse == false // true取反是false

还有一些需要记住的,像:

undefined == null //true
undefined和null 比较返回true,二者和其他值比较返回false

Number(null) //0

上一篇 下一篇

猜你喜欢

热点阅读