美文网首页
关于js的类型转换(强制类型和隐式类型)

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

作者: 程小E | 来源:发表于2017-03-09 14:10 被阅读142次

    转 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

    相关文章

      网友评论

          本文标题:关于js的类型转换(强制类型和隐式类型)

          本文链接:https://www.haomeiwen.com/subject/rymwgttx.html