跳到主要内容

构造函数

2023年02月10日
柏拉文
越努力,越幸运

String()


String() 将参数强制转换为 String 类型

注意

"" + valueString(value)${value} 作用相同,因为它们使用的算法规则相同

语法

const result = String(value)

const result = `${value}`

const result = "" + value

规则

  • 对于String类型: 则总是返回自己

    const value = "哈哈";
    console.log(String(value), typeof String(value));
    console.log(`${value}`, typeof `${value}`);
    console.log("" + value, typeof ("" + value));
  • 对于 undefined 类型: 返回 "undefined"

    const value = undefined;
    console.log(String(value), typeof String(value)); // undefined string
    console.log(`${value}`, typeof `${value}`); // undefined string
    console.log("" + value, typeof ("" + value)); // undefined string
  • 对于 null 类型: 返回 "null"

    const value = null;
    console.log(String(value), typeof String(value)); // null string
    console.log(`${value}`, typeof `${value}`); // null string
    console.log("" + value, typeof ("" + value)); // null string
  • 对于 Boolean 类型: true 返回 "true"; false 变成了 "false"

    const value = true;
    console.log(String(value), typeof String(value)); // true string
    console.log(`${value}`, typeof `${value}`); // true string
    console.log("" + value, typeof ("" + value)); // true string
  • 对于 Number 类型: 通过解析它们来转换, 解析规则如下:

    • 使用与 toString(10) 相同的算法转换数字

    • 使用与 toString(10) 相同的算法转换 BigInt

  • 对于 Symbol 类型: 抛出 TypeError

  • 对于 Object 类型: 对象首先按顺序调用 @@toPrimitive]()(将 string 作为 hint)、toString()valueOf() 方法将其转换为原始值。然后将生成的原始值转换为字符串。

    const value = {};
    console.log(String(value), typeof String(value)); // [object Object] string
    console.log(`${value}`, typeof `${value}`); // [object Object] string
    console.log("" + value, typeof ("" + value)); // [object Object] string

    过程分析:
    1. String({}) 首先调用 toString(): {}.toString() 结果为 "[object Object]" , 是原始值类型
    2. 所以 String({}) = String("[object Object]")
  • 对于 Array 类型: 数组首先按顺序调用 @@toPrimitive]()(将 string 作为 hint)、toString()valueOf() 方法将其转换为原始值。然后将生成的原始值转换为字符串。

    const value = [];
    console.log(String(value), typeof String(value)); // "" string
    console.log(`${value}`, typeof `${value}`); // "" string
    console.log("" + value, typeof ("" + value)); // "" string

    过程分析:
    1. String([]) 首先调用 toString(): [].toString() 结果为 "" , 是原始值类型
    2. 所以 String([]) = String("")

    const value = [1,2];
    console.log(String(value), typeof String(value)); // 1,2 string
    console.log(`${value}`, typeof `${value}`); // 1,2 string
    console.log("" + value, typeof ("" + value)); // 1,2 string

    过程分析:
    1. String([1,2]) 首先调用 toString(): [1,2].toString() 结果为 "1,2" , 是原始值类型
    2. 所以 String([1,2]) = String("1,2")
  • 对于 Function 类型: 函数首先按顺序调用 @@toPrimitive]()(将 string 作为 hint)、toString()valueOf() 方法将其转换为原始值。然后将生成的原始值转换为字符串。

    const value = function(){};
    console.log(String(value), typeof String(value)); // function(){} string
    console.log(`${value}`, typeof `${value}`); // function(){} string
    console.log("" + value, typeof ("" + value)); // function(){} string

new String()


new String(value) 创建一个 String 类型的包装对象

语法

const string = new String("32")
console.log(string);

返回值

返回一个 String 类型的包装对象, 如下所示:

String {'哈哈'}
0: "哈"
1: "哈"
length: 2
[[Prototype]]: String
[[PrimitiveValue]]: "哈哈"