美文网首页
JS运算符及显示隐式类型转换

JS运算符及显示隐式类型转换

作者: LuoDada | 来源:发表于2020-08-07 15:57 被阅读0次
    1. 加法规则
    1. 布尔值和布尔值相加、数字和布尔值相加。布尔值默认会自动转成数值,然后相加。
    console.log(true + false) // 1
    console.log(2 + true) // 3
    
    1. 两个字符串相加。这时加法运算符会变成连接运算符,返回一个新的字符串。
    console.log('abc' + 'def') // abcdef
    
    1. 字符串与非字符串相加。这时非字符串会转成字符串,再连接在一起。
    console.log(123 + 'abc') // 123abc
    
    1. 对象相加。如果运算子是对象,必须先转成原始类型的值,然后再相加。
    • 第一步:
      自动调用valueOf方法(一般来说,对象的valueOf方法总是返回对象自身) ,如果返回原始类型的值,则不在调用toString方法。
    • 第二步:
      如果valueOf方法返回还是对象,再自动调用对象的toString方法,将其转为字符串。
    • 第三步:
      如果toSrting方法返回的是对象,就会报错。

    如果想得到想要的结果,可以自定义valueOf方法或toString方法。

    console.log({} + 'abc') // [object Object]abc
    console.log([1] + 'abc') // 1abc
    console.log([1,2,3] + 'abc') // 1,2,3abc
    详解:
    1. console.log({} + 'abc') // [object Object]abc
    第一步:
      {}会自动调用valueOf方法// {}.valueOf => {}
    第二步:
      这时再自动调用对象的toString方法,将其转为字符串。// {}.toString() => [object Object]
    第三步:
      [object Object] + 'abc' = '[object Object]abc'
    
    1. 非加法运算符减法、乘法、除法(一律转为数值,在进行相应的数字运算)
    console.log('100' - 20) // 80
    console.log('abc' - 1) // NaN
    console.log(2 * '8') // 16
    console.log(2 * 'abc') // NaN
    console.log('12' / 2) // 6
    console.log('abc' / 2) // NaN
    

    3.数值运算符,负数值运算符 (+、-)

    数值运算符的作用可以将任何值转换成数值类型;

    console.log(+true)  // 1
    console.log(+[])  // 0
    console.log(+{}) // NaN
    
    console.log(-true)  // -1
    console.log(-[])  // -0
    console.log(-{}) // NaN
    
    1. 指数运算符(**)

    前一个数是底数,后一个数是指数。指数的运算是【右结合】。

    console.log(2 ** 3) // 8
    console.log(2 ** 3 ** 2) //512 => 相当于2**(3**2) 
    
    1. 字符串的比较(区分大小写=>Unicode不同)

    字符串按照字典顺序进行比较:JavaScript 引擎内部首先比较首字符的 Unicode 码点。如果相等,再比较第二个字符的 Unicode 码点,以此类推。

    console.log('a' > 'A') // true 'a'.charCodeAt() => 97 'A'.charCodeAt()=> 65
    
    1. 非字符串的比较
    • 如果两个运算子之中,至少有一个不是字符串,需要分成以下两种情况:
    1. 原始类型值
      如果两个运算子都是原始类型的值,则会先转成【数值】再比较。
    2. 对象
      如果运算子是对象,会转为【原始类型的值】,在进行比较。

    7.undefined和null

    undefined其他类型的值比较时,结果都是false,它们相互比较时结果为true.

    console.log(undefined == null) // true
    console.log(undefined === null) // false
    
    console.log(123 > undefined)  // false
    console.log(123 < undefined)  // false
    
    console.log(123 > null) // true
    console.log(123 < null) // false
    
    console.log(0 > null) // false
    console.log(0 < null) // false
    console.log(0 == null) // false
    
    1. 数据类型转换-Number()
    • 原始类型值
      Number函数将字符串转为数值,只要有一个字符串无法转为数值,整个字符串就会被转为NaN。
    console.log(Number('123')) // 123
    console.log(Number('123abc')) // NaN
    console.log(Number(true)) // 1
    console.log(Number(false)) // 0
    console.log(Number('')) // 0
    console.log(Number(undefined)) // NaN
    console.log(Number(null)) // 0
    
    • 对象
    console.log(Number({})) // NaN
    console.log(Number([])) // 0
    console.log(Number([6])) // 6
    console.log(Number([1, 2])) // NaN
    
    1. 第一步:
      调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。
    2. 第二步:
      如果valueOf方法返回还是对象,则改为调用对象只身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不在进行后续步骤。
    3. 第三步:
      如果toString方法返回的是对象,就报错。
    1. 数据类型转换-String()
    • 原始数据类型
      String函数可以将任意类型的值转发成字符串。
    console.log(String('123')) // '123'
    console.log(String(true)) // 'true'
    console.log(String(false)) // 'false'
    console.log(String(undefined)) // 'undefined'
    console.log(String(null)) // 'null'
    
    • 对象
    console.log(String({})) // '[object Object]'
    console.log(String([])) // 
    console.log(String([6])) // '6'
    console.log(String([1, 2])) // '1,2'
    

    String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。[String([1,3,2]) // “1,3,2”]

    1. 第一步:
      先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行后续操作。
    2. 第二步:
      如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不在进行以下步骤。
    3. 第三步:
      如果valueOf方法返回的是对象,就报错。
    1. 数据类型转换-Boolean()
    • 原始数据类型
    console.log(Boolean('123')) // true
    
    console.log(Boolean('')) // false
    console.log(Boolean(0)) // false
    console.log(Boolean(false)) // false
    console.log(Boolean(undefined)) // false
    console.log(Boolean(null)) // false
    console.log(Boolean(NaN)) // false
    

    Boolean函数可以将任意类型转为布尔值。
    undefined、null、false、0、''、NaN 为false其它都为true

    • 对象
      所有的对象的布尔值都是true。
    Boolean(new Boolean(false)) // true
    
    console.log(Boolean({})) // true
    console.log(Boolean([])) // true
    console.log(Boolean([6])) // true
    console.log(Boolean([1, 2])) // true
    

    相关文章

      网友评论

          本文标题:JS运算符及显示隐式类型转换

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