js转数据类型的方法汇总

js   2025-04-01 14:57   101   0  

在 JavaScript 中,数据类型转换分为 显式转换(手动转换)和 隐式转换(自动转换)。以下是常见转换方法及规则:

一、显式转换(手动转换)

1. 转为字符串 String

  • 方法

    String(value);   // 通用方式
    value.toString(); // 不能转  null/undefined
    `${value}`;      // 模板字符串
  • 规则

    • null → "null"undefined → "undefined"

    • 对象默认返回 "[object Object]",数组转为逗号拼接的字符串:

      javascriptString({});         // "[object Object]"
      String([1, 2, 3]);  // "1,2,3"

2. 转为数值 Number

  • 方法

    Number(value);   // 严格转换
    parseInt(value, 基数);  // 解析整数(忽略非数字后缀)
    parseFloat(value);     // 解析浮点数
    +value;          // 一元运算符(等同 Number())
  • 规则

    Number("123");    // 123
    Number("123abc"); // 
    NaN(完全无效则返回 NaN)
    Number("");       // 0(空字符串转 0)
    Number(null);     // 0
    Number(undefined); // NaN
    Number(true);     // 1, false → 0

3. 转为布尔值 Boolean

  • 方法

    Boolean(value); // 显式转换
    !!value;        // 双非运算(等效 Boolean)
  • 假值(转为 false 的情况)

    Boolean([]);      // true
    Boolean({});      // true
    Boolean("0");     // true(非空字符串)
    • false0""nullundefinedNaN
      其余均为 true(包括空对象、空数组):

      Boolean([]); // true
      Boolean({}); // true
      Boolean("0"); // true(非空字符串)


二、隐式转换(自动转换)

JavaScript 在特定操作中会自动转换类型,常见场景:

1. 数学运算

  • + 运算符

    • 若一方为字符串,则转为字符串拼接:

      "3" + 4;      // "34"
      3 + "4";      // "34"
      "5" + null;   // "5null"
    • 其他运算符(-*/)优先转为数值:

      "5" - 2;      // 3
      "10" / "2";   // 5

2. 逻辑判断

  • if||&& 等会将值隐式转为布尔值:

    if (0 || "" || null || undefined || NaN) {  // 不会执行(这些值转为 false)}

3. == 宽松相等比较

  • 类型不同时,优先转为数值再比较:

    "5" == 5;      // true(字符串转数值)
    null == undefined;  // true(特殊规则)
    "1" == true;   // true(true → 1, "1" → 1)

三、对象转原始值

对象转原始值时,优先调用 valueOf() 或 toString(),规则如下:

1. 转字符串(优先 toString()

const obj = {   
    toString() { return "obj"; },  
    valueOf() { return 1; }
};
String(obj); // "obj"(优先调用 toString)

2. 转数值(优先 valueOf()

const obj = {   
    valueOf() { return 100; },  
    toString() { return "200"; }
};
+obj; // 100(优先调用 valueOf)

3. 特殊场景(如 + 运算)

若对象参与 + 运算,可能优先调用 toString()

const obj = {   
    toString() { return "10"; },  
    valueOf() { return 5; }
};
obj + 1; // "101"(转字符串拼接)

四、实用转换示例

1. 快速转数字

+"123";       // 123(等同 Number("123"))
Math.floor("3.9"); // 3(向下取整)
~~"3.9";      // 3(双按位非,快速取整)

2. 转 JSON 字符串

JSON.stringify({ a: 1 }); // '{"a":1}'
JSON.parse('{"a":1}');    // { a: 1 }

3. 避免隐式转换的坑

  • 用 === 替代 ==

    "0" == 0;    // true(隐式转换)
    "0" === 0;   // false(严格不转换)
  • 检查有效数值

    isNaN("abc");  // true(需注意 isNaN 的隐式转换)
    Number.isNaN("abc"); // false(更严格)

五、总结表

目标类型方法/场景示例结果
字符串String()${}String(123) → "123"
数值Number()+Number("123") → 123
布尔值Boolean()!!Boolean("hi") → true
对象JSON.parse()JSON.parse('{}') → {}
隐式+ 运算、逻辑判断"3" + 4 → "34"if(0) → false

注意事项

  • parseInt 需指定基数(如 parseInt("10", 2) → 2)。

  • 对象转原始值时,注意 valueOf 和 toString 的优先级。

  • 避免依赖隐式转换,尽量显式转换以提高代码可读性。


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。