zoukankan      html  css  js  c++  java
  • js运算符及数据类型转换(二)

    1.一元运算符+、-【将其它类型转化为number类型,相当于调用了Number()函数
    var num = +('hello')  NaN  typeof num->number
    num = +('123')  123   typeof num->number
    num = +('-123') -123  typeof num->number
    num = -('-123') 123      typeof num->number
    num = -(null)   -0      typeof num->number

    2.比较运算符【==[值等]和===[全等]
    在各种数据类型之间进行比较时:
        a.null == null;undefined == undefined;  null与undefined只与自身值相等
        b.其它数据类型与number类型比较【==】时:大都是按照将其它类型转化为number类型再比较他们的值。
        c.string与boolean比较,即便看起来一样  也返回false。

    3.逻辑运算符&&【逻辑与】、||【逻辑或】、!【逻辑非】
    假性值:null,undefined,'',NaN,0,false 【转换为boolean类型为假】后面用‘假’表示
    a.逻辑与:【&&】(不一定返回boolean类型)
        判断过程中遇‘假’,则返回该假值;否则,返回最后一个数的值【即:当该表达式作为条件判断语句条件时,
        判断条件真假过程中,只要碰到‘假’,整个表达式为假[false],则后面值不判断且不运算执行
        
        与:【&】
        它与逻辑与【&&】所不同的是:当其作为条件判断语句条件时,
        判断条件真假过程中,当碰到‘假’时,整个表达式为假[false],但其后面值仍会判断和运算执行
    b.逻辑或:【||】(不一定返回boolean类型)
        判断过程中遇‘真’,则返回该真值;否则,返回最后一个数的值【即:当该表达式作为条件判断语句条件时,
        判断条件真假过程中,只要碰到‘真’,整个表达式为真[true],则后面值不判断且不运算执行
        
        或:【|】
        它与逻辑与【&&】所不同的是:当其作为条件判断语句条件时,
        判断条件真假过程中,当碰到‘真’时,整个表达式为真[true],但其后面值仍会判断和运算执行
    c.逻辑非:【!】(返回boolean类型)
        将!后面的值转化为boolean类型,然后在取反。
        !! 取反后再取反,相当于只对类型做了Boolean类型转换。
        
        非:【!】 它和逻辑非没有太大的差别
        
    4. 三目运算符:
        基本形式:变量 = 判断条件?真:假;
        真、假处可以填入各种数据类型的值【number、null、boolean、undefined、string、object、array、Function】    
        eg: var result = 5>3?666:999;  解析:5大于3条件为真,则result = 666;如果条件为假,则result = 999;

    5. 将其它数据类型转换为number
    1).转换:+a,-(-a), Number(a)
        如果是Boolean值,true和false值将分别被转换为1和0。
        如果是数字值,只是简单的传入和返回。
        如果是null值,返回0。
        如果是undefined,返回NaN。
        
        如果是字符串:
           a. 如果字符串中只包含数字时,将其转换为十进制数值,忽略前导+和0
           b. 如果字符串中包含有效浮点格式,如“1.1”,将其转换为对应的浮点数字,忽略前导+和0
           c. 如果字符串中包含有效的十六进制格式,如“0xf”,将其转换为相同大小的十进制数值
           d. 如果字符串为空【" "】,将其转换为0
           e. 如果字符串中包含除上述格式之外的字符,如“123aaa”,则将其转换为NaN。

            true:  1
            false:  0
            undefined:  NaN
            null:  0
            " ":  0

    2).解析: parseInt():将字符串转换为整数
            a. 从字符串第一个数【+、-、空格只有出现在字符串最前面不会被当做为非数字字符】开始直到非数字字符或解析完后续字符串结束
            b. parseInt() 转换过程中无法解析八进制字符串但可以解析十六进制字符串   十六进制parseInt('0xb'); 11  、 八进制数值当做十进制处理
            c. 其它情况以及用parseInt() 转换空字符串会返回NaN。

            parseFloat():将字符串转换为小数
                a. 从第一个字符(位置0)开始解析每一个字符。也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
                b. 如果字符串中包含的是一个可解析为正数的数(没有小数点,或者小数点后都是零),parseFloat() 会返回整数。
                c. parseFloat() 转化过程中无法解析八进制和十六进制字符串   十六进制parseInt('0xb'); 0  、  八进制数值当做十进制处理

            区别:parseFloat() 所解析的字符串中第一个小数点是有效的,而parseInt() 遇到小数点会停止解析,因为小数点并不是有效的数字字符。

            true:NaN
            false:NaN
            undefined:NaN
            null:NaN
            " ":  NaN

    6. 将其它数据类型转换为boolean
    1) !!a,Boolean(a)

    number;非0/+(-)Infinity(无穷的)     true
            0/NaN           false

    string:非空字符串       true
            空字符串        false
            null            flase
            undefined       flase

    7. 将其它数据类型转换为string
    1)toString(param)  不能用于undefined和null,他们二者没有toString方法;其可以带参数param:
    【2:数值转化为二进制字符串;8:数值转化为八进制字符串;16:数值转化为十六进制字符串】
        //3.toString()程序无法辨别.属于3.还是用来调用.toString()方法的【程序会报错】
            console.log(3.toString());
        //加了括号和使用..后可以明确.所起到的对应作用意义 【程序正常执行产生结果】
            console.log((3).toString());
    2)String()
        可以转化null和undefined,将其转化为:'null','undefined';
    3)使用字符串拼接的形式来进行转化:
        ' '+a ->  'a'
        '123'+'456' -> '123456'
        
    8. 特别注意:加法运算【+】
    多个数相加时:
    a.当操作数不存在String和Object类型,则先将它们转换为Number类型,然后再进行计算
        
    b.当操作数中有一个或多个为String类,其它数中不含对象类型时,都要转换为String类型,然后再进行拼接操作
        
    c.当操作数中有为对象类,如果该对象既重写toString,又重写了valueOf方法,先调用valueOf方法获
    取返回值,将该返回值和其它操作数进行运算。
    如果该对象没有重写valueOf方法,将调用toString方法【对象默认调用的方法】获取返回值,将该返回值和其他操作数进行运算。
                   

  • 相关阅读:
    Android之上下文context
    如果简单的记录,就可以为这个世界创造更多的财富,那么还有什么理由不去写博客呢? — 读<<黑客与画家>> 有感
    【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库
    【Graphql实践】使用 Apollo(iOS) 访问 Github 的 Graphql API
    【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录
    简陋的swift carthage copy-frameworks 辅助脚本
    【自问自答】关于 Swift 的几个疑问
    【读书笔记】The Swift Programming Language (Swift 4.0.3)
    【读书笔记】A Swift Tour
    【趣味连载】攻城狮上传视频与普通人上传视频:(一)生成结构化数据
  • 原文地址:https://www.cnblogs.com/nzcblogs/p/11159355.html
Copyright © 2011-2022 走看看