js转换成Number类型的方法与规则

转换成Number类型的规则

  • Undefined 类型的值转换为 NaN。
  • Null 类型的值转换为 0。
  • Boolean 类型的值,true 转换为 1,false 转换为 0。
  • String 类型的值转换如同使用 Number() 函数进行转换,如果包含非数字值则转换为 NaN,空字符串为 0。
  • Symbol 类型的值不能转换为数字,会报错
  • 对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。

为了将值转换为相应的基本类型值,抽象操作 ToPrimitive 会首先(通过内部操作 DefaultValue)检查该值是否有 valueOf()方法。如果返回基本类型值,就使用该值进行强制类型转换。如果没有就使用 toString() 的返回值(如果存在)来进行强制类型转换。
(如果对象没有 valueOf() 方法,或者 valueOf() 返回的是对象,那么会调用 toString() 方法,然后再尝试将返回值转换为数字。)
如果 valueOf() 和 toString() 均不返回基本类型值,会产生 TypeError 错误。

const obj = {
  name: "slx",
};
console.log(Number(obj)); // NaN

const obj1 = {
  valueOf: function () {
    return 42;
  },
  toString: function () {
    return "100";
  },
};
console.log(Number(obj1)); // 输出 42,因为调用了 valueOf() 方法并返回了一个数字

const obj2 = {
  toString: function () {
    return "Hello";
  },
};
console.log(Number(obj2)); // 输出 NaN,因为无法将 "Hello" 转换为数字

转换成Number类型的方法

将一个值转换为数字有几种方法,具体取决于要转换的值的类型和转换的需求:

  1. Number() 函数:最常见的方法是使用内置的 Number() 函数。它可以将大多数值转换为数字,包括字符串、布尔值、日期等。

    Number("123"); // 123
    Number(true);  // 1
    Number(false); // 0
    Number(new Date()); // 返回当前时间的时间戳
    
  2. parseInt() 和 parseFloat() 函数:这两个函数用于将字符串转换为整数或浮点数。

    parseInt("123"); // 123
    parseFloat("3.14"); // 3.14
    
  3. Unary Plus (+) 操作符:将操作数转换为数字。

    +"123"; // 123
    
  4. 使用 Number 对象的 valueOf() 方法:在某些情况下,可以通过调用对象的 valueOf() 方法来获取其原始值,然后再转换为数字。

    Number({ valueOf: function () { return 123; } }); // 123
    
  5. 使用 Math 对象的方法:例如,Math.floor()Math.ceil()Math.round() 等方法可以将数字或其他可转换为数字的值转换为整数。

  6. 隐式类型转换:在一些情况下,JavaScript 会自动将值转换为数字,例如在数学运算中。

    5 * "10"; // 50
    

这些方法可以根据具体的需求和场景选择使用。

相关推荐

  1. js转换Number类型方法规则

    2024-04-26 20:30:06       34 阅读
  2. 数据类型转换js问题)

    2024-04-26 20:30:06       65 阅读
  3. js中Symbol值强制类型转换

    2024-04-26 20:30:06       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 20:30:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 20:30:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 20:30:06       87 阅读
  4. Python语言-面向对象

    2024-04-26 20:30:06       96 阅读

热门阅读

  1. Kafka 监控之分层存储监控和 KRaft 监控指标

    2024-04-26 20:30:06       27 阅读
  2. 3个要点全面提升SQL数据安全

    2024-04-26 20:30:06       34 阅读
  3. Linux 三剑客之AWK

    2024-04-26 20:30:06       32 阅读
  4. 常用路由交换协议

    2024-04-26 20:30:06       33 阅读
  5. MYSQL 8.0的Linux - Generic版本安装

    2024-04-26 20:30:06       37 阅读
  6. Docker知识点总结

    2024-04-26 20:30:06       34 阅读
  7. 桶排序(Bucket Sort)

    2024-04-26 20:30:06       32 阅读
  8. 多图详解VSCode搭建Python开发环境

    2024-04-26 20:30:06       35 阅读