前端面试题——14.谈谈强制转换和隐式转换

强制类型转换

常见强制转换主要是Number,Boolean,String这三个函数
1.Boolean()函数
只有这五种情况是false,其它情况都为true

  1. undefined
  2. null
  3. -0或+0
  4. NaN
  5. ‘’(空字符串)

至于null是“对象”Boolean却返回false的,可以看这里

2.Number()函数

下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象

(1)原始类型值

原始类型值的转换规则如下。

    // 数值:转换后还是原来的值
    Number(324) // 324

    // 字符串:如果可以被解析为数值,则转换为相应的数值
    Number('324') // 324

    // 字符串:如果不可以被解析为数值,返回 NaN
    Number('324abc') // NaN

    // 空字符串转为0
    Number('') // 0

    // 布尔值:true 转成 1,false 转成 0
    Number(true) // 1
    Number(false) // 0

    // undefined:转成 NaN
    Number(undefined) // NaN

    // null:转成0
    Number(null) // 0

(2)对象

简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组或者空数组。

   Number({a: 1}) // NaN
   Number([1, 2, 3]) // NaN
   Number([5]) // 5
   Number([])  // 0

3.toString()和String()的区别:

两个函数都可以进行强制类型转换,只有String()可以把参数里的所有传值都转换为String类型,而toString()在转换null和undefined时会报错。

    var a = null;
    var b = a.toString(); // 发生错误
    var c = String(a); // c = null

隐式类型转换

  1. 不同类型的数据互相运算。
   123 + 'abc' // "123abc"  自动转换为String
  1. 第二种情况,对非布尔值类型的数据求布尔值。
   if ('abc') {   // 根据Boolean规则,对‘abc’隐式转换
     console.log('hello')
   }  

3.除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。

        '5' - '2'   // 3
        '5' * '2'  // 10
        true - 1   // 0
        false - 1  // -1
        '1' - 1    // 0
        '5' * []    // 0
        false / '5' // 0
        'abc' - 1   // NaN
        null + 1 // 1
        undefined + 1 // NaN
        +'abc' // NaN
        -'abc' // NaN
        +true // 1
        -false // 0

参考:
https://javascript.ruanyifeng.com/grammar/conversion.html
https://www.w3school.com.cn/js/pro_js_typeconversion.asp

你可能感兴趣的:(前端面试题,JS基础)