String
String() 构造函数创建 String 对象。当作为函数调用时,它返回 String 类型的原始值。
语法
返回值
当 String 作为构造函数(使用 new)被调用时,它会创建一个 String 对象,该对象不是原始类型。
当 String 作为函数被调用时,它会将参数强制转换为一个字符串原始类型。Symbol 值会被转换成 “Symbol(description)“,其中 description 是该 Symbol 的 description 属性值,而不会抛出错误。
注意❗
一般很少需要使用 String 作为构造函数。
使用 String 将各种类型转换为字符串
对引用类型使用 String 和调用他们默认的 toString 的效果基本一致。
toString()
toString
一般用于将引用类型的值转换为他们的字符串表示。每个引用类都可以实现自己的toString
方法,如果不存在的话,会通过原型链找到Object.prototype.toString
。
JavaScript 对象有两个不同的方法来执行转换,一个是 toString,一个是 valueOf。所有的对象除了 null 和 undefined 之外的任何值都具有 toString 方法,通常情况下,它和使用 String 方法返回的结果一致。toString 方法的作用在于返回一个反映这个对象的字符串。
参数
默认情况下,toString() 不接受任何参数。然而,继承自 Object 的对象可能用它们自己的实现重写它,这些实现可以接受参数。例如,Number.prototype.toString() 和 BigInt.prototype.toString() 方法接受一个可选的 radix 参数。
参数表示数字的进制
描述
所有继承自 Object.prototype 的对象(即,除了 null-prototype 对象之外的对象)都继承 toString() 方法。当你创建一个自定义对象时,你可以重写 toString() 以调用自定义方法,以便将自定义对象转换为一个字符串。或者,你可以增加一个 @@toPrimitive 方法,该方法允许对转换过程有更多的控制,并且对于任意的类型转换,且总是优先于 valueOf 或 toString。
要将基本的 Object.prototype.toString() 用于重写的对象(或者在 null 或 undefined 上调用它),你需要在它上面调用 Function.prototype.call() 或者 Function.prototype.apply(),将要检查的对象作为第一个参数传递(称为 thisArg)。
Object.prototype.toString() 返回 “[object Type]“,这里的 Type 是对象的类型。如果对象有 Symbol.toStringTag 属性,其值是一个字符串,则它的值将被用作 Type。许多内置的对象,包括 Map 和 Symbol,都有 Symbol.toStringTag。一些早于 ES6 的对象没有 Symbol.toStringTag,但仍然有一个特殊的标签。
它们包括(标签与下面给出的类型名相同):
- Array
- Function(它的 typeof 返回 “function”)
- Error
- Boolean
- Number
- String
- Date
- RegExp
arguments 对象返回 “[object Arguments]“。其他所有内容,包括用户自定义的类,除非有一个自定义的 Symbol.toStringTag,否则都将返回 “[object Object]“。
在 null 和 undefined 上调用 Object.prototype.toString() 分别返回 [object Null] 和 [object Undefined]。
使用 toString() 去检查对象类
以这种方式使用 toString() 是不可靠的;对象可以通过定义 Symbol.toStringTag 属性来更改 Object.prototype.toString() 的行为,从而导致意想不到的结果。例如:
进行进制间的互换
比如十进制和16进制之间的互换,这个可以用在
总结
String()
此函数能够将任何类型的值转换为字符串,一般用于强制转换。 String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回”null”
- 如果值是undefined,则返回”undefined”
toSring()
数值、布尔值、对象和字符串都有Object.prototype.toString()方法,但是null和undefined没有这个方法,一般用于自动转换。 一般情况下toString()方法不传参数,但是,在调用熟知的toString()方法时,可以传递一个参数:输出数值的基数。
valueOf()
Object.prototype.valueOf() 会在隐式转换的时候自动调用。