对象转换方法
大约 2 分钟约 589 字
Object 原型上有三个方法 toString()、toLocalString、valueOf() 可以将对象转换为原始值,然而对于不同的对象类型调用这几种方法会有不同的行为。
toString()
toString() 方法用于将一个对象转换为字符串表示形式。对于基本数据类型(如数字、布尔值、字符串等),toString() 方法会返回对应的字符串表示。
const num = 123
console.log(num.toString()) // 输出 "123"
const bool = true
console.log(bool.toString()) // 输出 "true"
const str = 'Hello'
console.log(str.toString()) // 输出 "Hello"
toLocaleString()
toLocaleString() 方法与 toString() 类似,但它返回的是一个本地化(即与用户本地文化相关的)的字符串表示。
这意味着返回的字符串可能根据用户的地区设置而有所不同,比如使用不同的日期格式、数字格式等。
const date = new Date()
console.log(date.toLocaleString()) // 输出本地化的日期时间字符串
valueOf()
valueOf() 方法返回指定对象的原始值。对于大多数对象来说,valueOf() 方法返回的值与对象本身是相同的,但可以通过重写这个方法来改变返回的值。
const obj = {
  valueOf() {
    return 123
  }
}
console.log(obj.valueOf()) // 输出 123
自动调用顺序
在 JavaScript 内部,当需要将对象转换为原始值时(比如在算术运算、逻辑运算、字符串拼接等情况下),会自动调用对象的 valueOf() 和 toString() 方法来获取原始值。它们的调用顺序如下:
- 如果对象具有 
valueOf()方法且返回的是原始值(非对象),则直接使用该值。 - 如果对象没有 
valueOf()方法,或者valueOf()返回的是对象,那么会调用对象的toString()方法。 - 如果对象没有 
toString()方法,或者toString()返回的是对象,那么会抛出 TypeError 错误。 
注意
valueOf() 和 toString() 方法在不同的上下文中可能会有不同的表现,具体取决于 JavaScript 引擎的实现和调用方式。
总结
这三种方法用于获得对象的字符串或原始值,在一些情况下会被 JavaScript 引擎自动调用,区别如下:
toString()用于将对象转换为字符串表示形式。toLocaleString()返回一个本地化的字符串表示。valueOf()返回对象的原始值。