zoukankan      html  css  js  c++  java
  • 强制类型转换

    阿里二面题,以前学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)



  • 相关阅读:
    JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结
    jQuery中的height()、innerheight()、outerheight()的区别总结
    单行及多行文本溢出以省略号显示的方法总结
    Android图片缩放 指定尺寸
    Android开源SlidingMenu的使用
    说说Android应用的persistent属性
    Android使用init.rc触发脚本实现隐藏内置应用
    android之实现上下左右翻页效果
    Android中播放声音
    Android中StatFs获取系统/sdcard存储(剩余空间)大小
  • 原文地址:https://www.cnblogs.com/ziqian9206/p/6916712.html
Copyright © 2011-2022 走看看