美文网首页饥人谷技术博客
认识JS隐式类型转换

认识JS隐式类型转换

作者: cccccchenyuhao | 来源:发表于2018-10-11 13:24 被阅读7次

    先来看看几个例子

     var a = true + false; 
    console.log(a);     //1 (true转化为1,false转化为0)
    
    if (" ") {
        console.log("true");
    } else {
        console.log("false");
    }          //true 非空字符串转化为true
    
    if ("") {
        console.log("true");
    } else {
        console.log("false");
    }       //false 空字符串转化为false
    
    var a = {
      valueOf: function () {
         return 1;
      },
      toString: function () {
         return '123'
      }
    }
    true == a // true;
    

    因为js比较灵活和宽容,所以在一些操作符下其数据类型会做一下类型转换再计算而不是报错。
    if(xxx) 判断和 == +都是比较常见的存在隐式类型转换的操作,以下总结了一些规律:

    +操作符

    • 在两个操作数都是数字的时候,会做加法运算
    • 两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
    • 在参数有对象的情况下会调用其valueOf或toString方法
    • 在只有一个字符串参数的时候会尝试将其转换为数字
    • 在只有一个数字参数的时候返回其正数值
    console.log(2+4);//6
    console.log("2"+"4");//"24"
    console.log(2+"4");//"24"
    console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
    console.log(+"4");//4 
    

    if (xxx)判断
    对于括号里的表达式,会被强制转换为布尔类型

    类型 结果
    Undefined false
    Null false
    Boolean 直接判断
    Number +0, −0, 或者 NaN 为 false, 其他为 true
    String 空字符串为 false,其他都为 true
    Object true
    if ("hello") {        //true
        console.log("hello")
    } 
    
    if ("") {         //false
        console.log('empty')
    }
    
    if (" ") {         //true
        console.log('blank')
    }
    
    var obj = {};
    if (obj) {            //true
      console.log(obj)
    }
    

    ==操作符
    对于x == y ,js是如何判断的呢?

    x y 结果
    null undefined true
    Number String x == toNumber(y)
    Boolean (any) toNumber(x) == y
    Object String or Number toPrimitive(x) == y
    otherwise otherwise false

    toNumber规则

    type Result
    Undefined NaN
    Null 0
    Boolean ture -> 1, false -> 0
    String “abc” -> NaN, “123” -> 123

    toPrimitive
    对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

    相关文章

      网友评论

        本文标题:认识JS隐式类型转换

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