美文网首页学习嘿
JS 里的数据类型转换

JS 里的数据类型转换

作者: 饥人谷_ika0s | 来源:发表于2019-08-22 21:30 被阅读0次

    强制类型转换

    使用parseInt()parseFloat()Number()Boolean()String()toString()进行数据类型转换

    Number()

    参数 结果
    undefined NaN
    null 0
    布尔值 true转换为1,false转为0
    数字 不转换,返回数字
    字符串 字符串只包含数字(包括正负号),转为10进制数,字符串为空,转为0,字符串中包含非数字字符,转为 NaN

    String()

    参数 结果
    undefined ’undefined‘
    null ’null‘
    布尔值 转换为'true' 或 'false'
    数字 数字转换字符串,比如:1.765转为'1.765'
    字符串 无须转换

    PS:String() 能够将任何类型的值转换为字符串,不知道要转换的值是不是 null 或 undefined 的情况下,使用String() ,而toString()不能转化undefined和null,因为两者没有该方法,会报错。,
    引用类型中,数组的toString()是把每个数组的元素以,分割的字符串的形式返回的,
    其余的返回[object type],其中type是对象的类型

    Boolean()

    5个falsy值
    除了这五个falsy值:''(空字符串)、0、NaN、undefined、null的,其他的值为true

    隐式类型转换

    四则运算符

    +操作符

    一元+:对非数值进行 Number() 转换;

    二元+:

    • +号两边只要其中一个是String类型,就将另一个也转为String进行拼接
    • 两边都不是String类型,则对非数值进行 Number() 转化
    1 + 'true'//’1true‘
    
    1 + true//'2'
    
    1 + null//1 1+0=1
    
    1 + undefined//NaN 1+NaN=NaN
    

    其余操作符只要其中一个是Number类型,就将另一个也转为Number进行计算

    关系运算符

    关系运算符会把其他数据类型转化为Number再比较关系

    <、>、<=、>=运算符

    • 有一边是字符串,对字符串使用Number()转成数字后进行比较
    • 两边都是字符串,比较两个字符串对应的unicode编码值
    //单字符比较
    '9'>'50'//true  '9'.charCodeAt(0)=57,'50'.charCodeAt(0)=53
    
    //多字符比较
    'abc'>'b'//false 从左到右依次比较,先比较'a'和'b' 'a'.charCodeAt(0)=97,'b'.charCodeAt(0)=98
    

    == 运算符

    比较相等性之前,不能将null和undefined转换成其他任何值。就是undefined和null与其他数在进行相等判断时不进行类型转换。null == undefined //true

    类型相同时,没有类型转换,注意NaN不与任何值相等,包括自身。NaN !== NaN。

    不同数据类型的转换按下图方式进行转换

    不同数据类型的转换步骤
    对象转换为基本类型
    • 先查找对象的valueOf方法,(Date对象是先查找toString)如果有且返回基本类型值,则使用该值
    • 如果没有就使用 toString 方法的返回值(如果存在)来进行强制类型转换

    一些例子:

    []==[]//false,比较的是内存中的地址
    [] == ![]//true,根据运算符优先级,!优先级大于==,先执行![],“!” 为逻辑非,在操作非布尔值类型的数据时,会将该数据类型先转换为布尔值后再取反,而Boolean([])返回true,所以表达式相当于[]==false,false转数值为0,[]先调用valueOf方法,返回this,不是原始值,继续调用toString方法, [].toString() = ''。''调用Number方法,转为数字0。0==0,返回true
    {}=!{}//false,左边 ({}.toString())返回'[Object Object]',调用Number方法,返回NaN
    [null] == 0//true,[null].toString() = '', Number('')=0
    [null] == false//true
    null == 0//false, null不进行类型转换
    [undefined] == false //true,[undefined].toString() = ''Number('')=0
    [null]==[]//false 两个数组比较
    [undefined] == [] //false,两个数组比较,比较索引是否相同
    

    相关文章

      网友评论

        本文标题:JS 里的数据类型转换

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