• 强制类型转换


    阿里二面题,以前学c那些强类型语言,没有注意,js的类型转换与那些强类型语言不同。

    首先,明确基本类型之间转换规则。基本类型(primitive type)分为:number,string,boolean,undefined,null,还有symbol。

    ToString,ToNumber,ToBoolean以及ToPrimitive

    1.ToString非字符串转化为字符串

    null->'null'

    undefined->"undifined"

    普通对象:有toString方法调用toString,否则返回内部[[class]]。"[object Object]"。

    数组:所有单元变用,连接的字符串

    json:调用JSON.stringify(),JSON.stringify()在对象中遇到undefined、function、symbol自动忽略,在数组中则返回null。

      JSON.stringify(undefined);//undefined

          JSON.stringify([1,undefined,function(){}]);//[1,null,null]

    2.ToNumber

    true->1,false->0,undefined->NaN,null->0。

    ToNumber对0开头的十六进制数以十进制处理。

    将对象转为基本类型:先检查是否有valueOf()方法,若无,则使用toString()方法。两种方法都不返回基本类型值,就产生TypeError错误

    Number(["abc"])//NaN

    3.ToBoolean

    JS中不仅仅false表示假,undefined ,null,0,NaN,""都表示假。

    所有对象都是真。

    4.显式类型转换

    (1)字符串和数字

    除了Number()和String()外,还有其他方法可以实现字符串和数字的显示类型转换。

    var a=42;

    a.toString();//"42"

    var c="3.14";

    +c;//3.14

    +一元运算符,显式将操作数强制类型转换为数字

    (2)解析数字字符串

    var a="42px"

    Number(a)//NaN

    parseInt(a)//42

    parseInt()解析字符串为数字,允许有非数字,遇到非数字停止.若参数非字符串,转换为字符串解析,因此要避免参数为非字符串。

    Number()转换,有非数字,返回NaN

    (3)转换为布尔值

    一元运算符!显式强制转换为布尔值,一般用!!来表示原值的布尔值

    三目运算符?:也是强制类型转换

    5.隐式类型转换

    (1).字符串和数字间隐式类型转换

    只要有一个操作数是字符串,+执行的就是字符串拼接。

    []+{}//"[object Object]"

    {}+[]//0

    []->"",{}->[object Object]

    {}代码块,相当于+[]->0

    -数字减法运算符,a-0将a强制转换为数字

    (2)隐式类型转换为布尔值

    ·if

    ·for()

    ·while,do while

    ·?:

    ·|| &&左边操作数

    其中,||操作数1为真返回操作数1,为假返回操作数2

    &&操作数1为真返回操作数2,为假返回操作数1.

    (3)符号强制类型转换

    符号类型可以显示String()转换为字符串,不能隐式转换。

    符号类型可以转换为布尔值

    (4)相等操作符==

    允许不同类型通过转换后比较

    null==undefined//true

    一般都转换成Number类型比较

    最好不要用==true或者==false

    用if(!!a)

    NaN不等于NaN

    +0等于-0

    ***对象和非对象的相等比较

    x==ToPrimitive(y)



  • 相关阅读:
    慎用rm -rf
    Jquery 中a||""的含义
    【学习、总结】Spring security 登陆超时处理
    Eclipse 无限编译Invoking 'Maven Project Builder'导致卡主
    For多重循环 break continue
    随机编码的生成
    QQ互联Oauth2.0认证测试
    Java开发工程师(Web方向)
    Java开发工程师(Web方向)
    前端开发工程师
  • 原文地址:https://www.cnblogs.com/ziqian9206/p/6916712.html
Copyright © 2020-2023  润新知