美文网首页
JS数据类型转换规律汇总

JS数据类型转换规律汇总

作者: 空压机百科 | 来源:发表于2020-02-10 22:11 被阅读0次
    基本数据类型

    1、数字(number)
    2、字符串(string)
    3、布尔(boolean)
    4、空(null)
    5、未定义(undefined)

    引用类型

    对象(object)
        普通对象
        数组对象(Array)
        正则(RegExp)
        日期对象(Date)
    函数(function)

    把其他数据类型转换为number
    • 需要转换的情况
      1、isNaN检测,当检测的值不是数字类型,浏览器会自己调用Number方法先把它转换为数字,然后在检测是否为非有效数字
      2、基于parseInt / parseFloat手动转换为数字类型(与Number区别在于字符串转化分析上,parseInt把字符串中整数部分解析出来,parseFloat把一个字符串中小数部分也解析出来。从字符串最左边开始查找有效数字字符并转换为数字,但遇到非有效数字字符查找结束)
      3、数学运算:+ - * / %,但是“+”不仅仅是数学运算还可能是字符串拼接。但是 i++ 就是单纯的数学运算不是字符串拼接
      4、基于“==”比较,有时候也会把其它值转换为数字类型
    • 转换规律
      1、字符串转数字
      转换方法:Number(浏览器自行转换都是基于这个方法)
      只要遇到一个非有效数字字符,结果都是NaN,空字符串是0
      2、布尔转换数字
      true => 1      false => 0
      3、没有转换为数字
      null => 0      undefined => NaN
      4、引用类型转换数字
      首先都转换为字符串(toString),然后再转换为数字
    把其它类型值转换为字符串
    • 需要转换的情况
      1、基于alert / confirn / prompt / document.write等方法输出内容的时候,会把输出的值转换为字符串再输出
      2、基于“+”字符串拼接
      3、把引用值转化为数字的时候,首先会转换为字符串,然后再转换数字
      4、给对象设置属性名,如果不是字符串,首先转换为字符串,然后再当作属性存储到对象中
      5、手动调用toString / toFixed / join / String等方法 还有更多....
    • 转换规律
      除了对象,都是理解的转换结果加双引号或单引号“” / ‘’
      对象转换结果是 "[object Object]"
      ......
    把其它类型换为布尔类型
    • 需要转换的情况
      1、基于 ! / !! / Boolean等方法转换
      !:先把其他数据类型转化为布尔类型然后取反
      !!:同样把其他数据类型转化为布尔类型然后取反两次
      2、条件判断中的条件最后都会转换为布尔类型
      ......
    • 转换规律
      只有空字符串、0、null、undefined、NaN转换结果是false,其余都转换为true
    特殊情况:数学运算和字符串拼接“+”

    当表达式中出现字符串就是字符串拼接,否则就是数学运算

    1 + true  // 数学运算结果为2
    “1” + true  // 字符串凭借结果为"1true"
    [12] + 10  //  虽然没有看见字符串,但是引用类型转换数字首先转换为字符串,所借就是字符串拼接。结果为"1210"
    ({}) + 10 //  结果为"[object Object]10"
    [] + 10  //  结果为“10”
    {} + 10  //  结果是10,因为{}代表代码块, +10才是我们的操作,严格写法{}; +10
    
    特殊情况:“==”进行比较的时候,如果左右两边的数据类型不一样,则先转换为相同类型,再进行比较

    对象 == 对象:不一定相等,因为对象操作的是引用地址,地址不同则不相等
    对象 == 数字:把对象转换为数字
    对象 == 布尔:把对象转换为数字,把布尔也转换为数字
    对象 == 字符串:把对象转换为数字,把字符串也转换为数字
    字符串 == 数字:字符串转换为数字
    字符串 == 布尔:都转换为数字
    布尔 == 数字:布尔转换为数字
    不同情况的比较都是把其它值转换为数字再进行比较

    null == undefined:true
    null === undefined:false
    null && undefined和谁都不相等
    NaN == NaN:和谁都不相等包括自己结果为 false

    [] == true //都转换为数字 ==> 0 == 1结果为false
    [] == false //都转换为数字 ==> 0 == 0结果为true
    ![] == true //先计算![],把数组转换为布尔取反 ==> false == false结果为false
    ![] == false //false == false结果为true
    

    相关文章

      网友评论

          本文标题:JS数据类型转换规律汇总

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