likes
comments
collection
share

简单了解JavaScript 中的类型转换

作者站长头像
站长
· 阅读数 18

前言

当涉及到JavaScript中的类型转换时,理解其机制和行为是至关重要的。类型转换可以帮助我们处理不同数据类型之间的操作,同时也会影响到比较和计算的结果。JavaScript在进行类型转换时遵循一系列规则,例如将值转换为布尔类型、数字类型或字符串类型。此外,对象在转换为原始值时也有其特定的行为,涉及到valueOf()toString()方法的调用顺序。

原始值转换

  1. 转布尔类型 (Boolean(x))

    • 将值 x 转换为布尔类型。在 JavaScript 中,大部分值都能转换为布尔类型。例如:

      let s='s'
      let n=123
      let f=false
      let u=undefined
      let nu=null
      
      console.log(Boolean(s));//true
      console.log(Boolean(n));//true
      console.log(Boolean(Infinity));//true
      console.log(Boolean(-Infinity));//true
      console.log(Boolean(''));//false
      console.log(Boolean(0));//false
      console.log(Boolean(-1));//true
      console.log(Boolean(NaN));//false
      console.log(Boolean(undefined));//false
      console.log(Boolean(null));//false
      console.log(Boolean(false)); // false
      console.log(Boolean());//false
      

      结果示例:

简单了解JavaScript 中的类型转换

  1. 转数字 (Number(x))

    • 将值 x 转换为数字类型。JavaScript 中的数字类型包括整数和浮点数。例如:

      let s='s'
      let n=123
      let f=false
      let u=undefined
      let nu=null
      
      console.log(Number('123'));//123
      console.log(Number('abc'));//NaN
      console.log(Number(''));//0
      console.log(Number('a123'));//NaN
      console.log(Number(true));//1
      console.log(Number(false));//0
      console.log(Number(null));//0
      console.log(Number(undefined));//NaN
      console.log(Number());//0
      

      结果示例:

简单了解JavaScript 中的类型转换 3. 转字符串 (String(x))

  • 将值 x 转换为字符串类型。字符串在 JavaScript 中使用单引号或双引号包裹。例如:

    let n=123
    console.log(String(n));
    console.log(String([1,2,3]));
    

简单了解JavaScript 中的类型转换

对象转换为原始值

当对象参与某些操作时,JavaScript 会自动将其转换为原始值,具体如下:

  1. 转number
    • 先调用ToNumber(x),该函数中会再调用ToPrimitive(x,Number)将对象转为原始值

    • ToPrimitive(object,Number):

    1. 判断接收到的值是不是原始类型,是,则返回
    2. 否则,调用valueOf(),如果得到了原始值,则返回
    3. 否则,调用toString()方法,如果得到了原始值,则返回
    4. 报错
    5. 例如
console.log(Number({}));
// Number({})
//1. ToPrimitive()
//2. let primValue=ToPrimitive({}, Number)
//'[object,object]'
// ToNumber('[object,object]')=>NaN
console.log(Number([]));
// Number([])
//1. ToPrimitive()
//2. let primValue=ToPrimitive([], Number)//''
//3. Number('')
//ans:0
结果示例

简单了解JavaScript 中的类型转换

  1. 转String
    • String({})先调用ToString(x),该函数中会再调用ToPrimitive(x,String)将对象转为原始值

    • ToPrimitive(object,String):

    1. 判断接收到的值是不是原始类型,是,则返回
    2. 否则,调用toString(),如果得到了原始值,则返回
    3. 否则,调用valueOf()方法,如果得到了原始值,则返回
    4. 报错
    5. 例如
console.log(String({}));
//ToString({})
//let primValue=ToPrimitive({}, String)//"[object Object]"
//String("[object Object]")//"[object Object]"

简单了解JavaScript 中的类型转换

  1. 转换为布尔值
    • 任何对象在布尔类型的上下文中都会被视为 true
    • 例如:
if({}){
    console.log('ok')
}

简单了解JavaScript 中的类型转换

toString() 方法

在 JavaScript 中,toString() 方法是一个常见的方法,用于将对象转换为字符串的形式。例如:

  • 对于普通对象,toString() 方法通常返回 "[object Object]"
  • 对于数组,toString() 方法返回一个由数组元素组成的以逗号分隔的字符串。

一元操作符 +

一元操作符 + 会触发隐式类型转换,将值转换为数字类型。例如:

+'123';   // 123
+'abc';   // NaN,因为 'abc' 无法转换为有效的数字

二元操作符 +

  1. 数字加法

    • 当 + 操作符两侧的操作数都是数字时,它执行加法操作。
    let sum = 1 + 2;  // sum 等于 3
    
  2. 字符串拼接

    • 当 + 操作符两侧至少有一个操作数是字符串时,它执行字符串拼接操作。
    let str = 'Hello' + ' ' + 'World';  // str 等于 'Hello World'
    

如果 + 操作符的任一操作数不是字符串,则 JavaScript 将尝试将其转换为字符串。这种情况下的类型转换称为隐式类型转换。例如: javascript let result = 'The answer is: ' + 42; // result 等于 'The answer is: 42'

在这里,数字 42 被隐式地转换为字符串 '42',然后与前面的字符串进行拼接。

需要注意的是,+ 操作符在不同类型之间的行为可能不同,因此在使用时要注意其作用以及可能引发的隐式类型转换

双等号 == vs 三等号 ===

  • == 操作符会触发隐式类型转换,然后进行值的比较。
  • === 操作符不会进行类型转换,而是直接比较值及其类型是否相等。
1 == '1';    // true,因为 '1' 被转换为数字 1,与 1 相等
1 === '1';   // false,因为类型不同

小结

本文介绍了 JavaScript 中常见的类型转换和操作符使用规则。首先,我们讨论了 toString() 方法,它用于将对象转换为字符串形式,不同类型的对象返回不同的结果。接着,我们探讨了一元操作符 + 的作用,以及它如何触发隐式类型转换将值转换为数字类型。对于二元操作符 +,我们详细说明了它的两种主要用途:数字加法和字符串拼接。在字符串拼接时,JavaScript 会进行隐式类型转换,确保操作数正确地转换为字符串形式。最后,我们比较了双等号 == 和三等号 === 的区别,强调了在比较值时要注意它们的不同行为,确保代码逻辑的准确性和稳定性。

深入理解 JavaScript 中的类型转换机制对开发者编写健壮和可靠的代码至关重要,这样可以有效避免由于类型不当而引发的错误。

转载自:https://juejin.cn/post/7392513761875345418
评论
请登录