7_TypeScript Number --[深入浅出 TypeScript 测试]

打印 上一主题 下一主题

主题 1388|帖子 1388|积分 4164

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
TypeScript 是 JavaScript 的一个超集,它添加了静态类型检查和其他一些特性来帮助开发者编写更可靠、更易于维护的代码。在 TypeScript 中,Number 类型用于表示数值数据类型,包括整数和浮点数。TypeScript 的 Number 类型对应于 JavaScript 的原始数值类型。
Number 对象与根本 number 类型的区别

在 TypeScript(以及 JavaScript)中,number 类型和 Number 对象有明显的区别。理解这两者之间的差异对于精确使用数值类型非常紧张。
根本 number 类型



  • 原始值:number 是一种原始数据类型,它用于表示数值,包括整数和浮点数。它是直接存储的数值,而不是对象。
  • 性能更高:因为 number 是原始值,所以它们的处理速率更快,占用的内存也更少。
  • 不可变性:作为原始值,number 一旦创建就不能改变。每次对 number 举行操纵都会产生一个新的数值。
  • 用法简单:当你只需要一个简单的数值时,通常会使用 number 类型。
  1. let age: number = 30;
复制代码
Number 对象



  • 包装对象:Number 是一个构造函数,可以用来创建一个包装了原始数值的对象。它提供了额外的方法和属性来操纵数值。
  • 包含静态方法和属性:Number 对象包含了多个静态方法和属性,如 Number.MAX_VALUE, Number.MIN_VALUE, Number.isNaN(), 等等。
  • 可拥有属性:由于是对象,Number 实例可以拥有属性和方法,只管这在现实开发中很少见。
  • 性能较低:相比于原始的 number 类型,Number 对象的操纵可能会稍微慢一些,并且斲丧更多的内存。
  • 主动拆箱:JavaScript 在需要的时间会主动将 Number 对象转换为原始的 number 类型(称为“拆箱”),比方举行数学运算时。
  1. let numObj = new Number(30);
  2. console.log(numObj); // 输出: Number { 30 }
复制代码
留意事项



  • 不要随意使用 new Number():在大多数情况下,没有必要使用 new Number() 来创建数值的包装对象。直接使用原始的 number 类型即可。使用 new Number() 可能会导致意外的行为,特别是在比较相等性时,因为两个不同的 Number 对象纵然包含相同的数值也不会被认为是相等的。
  1. let a = new Number(10);
  2. let b = new Number(10);
  3. console.log(a == b); // false, 因为它们是不同的对象
  4. console.log(a === b); // false, 同上
  5. console.log(a.valueOf() === b.valueOf()); // true, 比较的是内部的原始值
复制代码


  • 静态方法的使用:你可以直接通过 Number 构造函数访问静态方法,而不需要创建 Number 的实例。比方:
  1. let parsedInt = Number.parseInt("123"); // 使用静态方法 parseInt
复制代码
总之,在日常编程中,你应该优先选择使用根本的 number 类型,除非你有特定的理由需要使用 Number 对象。
Number 对象属性

Number 对象在 TypeScript 和 JavaScript 中提供了一些有用的静态属性,这些属性可以直接通过 Number 构造函数访问,而不需要创建 Number 的实例。以下是 Number 对象的一些常用属性:
静态属性



  • Number.EPSILON: 表示1与大于1的最小浮点数之间的差异,用于比较浮点数以确定它们是否足够接近。
    1. console.log(Number.EPSILON); // 输出: 2.220446049250313e-16
    复制代码
  • Number.MAX_SAFE_INTEGER: 可以安全使用的最大整数值(2^53 - 1)。
    1. console.log(Number.MAX_SAFE_INTEGER); // 输出: 9007199254740991
    复制代码
  • Number.MIN_SAFE_INTEGER: 可以安全使用的最小整数值(-(2^53 - 1))。
    1. console.log(Number.MIN_SAFE_INTEGER); // 输出: -9007199254740991
    复制代码
  • Number.MAX_VALUE: 可以大概表示的最大正数。
    1. console.log(Number.MAX_VALUE); // 输出: 1.7976931348623157e+308
    复制代码
  • Number.MIN_VALUE: 可以大概表示的最接近零的正数(非零)。
    1. console.log(Number.MIN_VALUE); // 输出: 5e-324
    复制代码
  • Number.NaN: 表示“不是数字”的特殊值。
    1. console.log(Number.NaN); // 输出: NaN
    复制代码
  • Number.NEGATIVE_INFINITY: 表示负无穷大。
    1. console.log(Number.NEGATIVE_INFINITY); // 输出: -Infinity
    复制代码
  • Number.POSITIVE_INFINITY: 表示正无穷大。
    1. console.log(Number.POSITIVE_INFINITY); // 输出: Infinity
    复制代码
使用留意事项

当使用 Number 对象的静态属性时,直接通过 Number 访问即可,不需要也不应该使用 new Number() 来创建对象实例来访问这些属性。比方:
  1. // 正确用法
  2. console.log(Number.MAX_VALUE);
  3. // 错误用法,不应该这样做
  4. let numObj = new Number(42);
  5. console.log(numObj.MAX_VALUE); // 这不会工作,因为 MAX_VALUE 是静态属性
复制代码
以上列出的属性都是只读的,并且是静态的,意味着它们属于 Number 构造函数本身而不是它的实例。因此,当你需要使用这些常量时,总是直接从 Number 访问它们。
Number 对象方法

Number 对象在 TypeScript 和 JavaScript 中提供了许多静态方法和实例方法,用于数值的剖析、格式化以及数值属性的检查等操纵。这些方法可以帮助开发者更方便地处理数值类型的数据。以下是 Number 对象的一些常用方法:
静态方法



  • Number.parseFloat(string): 将一个字符串剖析为浮点数。
    1. console.log(Number.parseFloat("123.45")); // 输出: 123.45
    复制代码
  • Number.parseInt(string, radix): 将一个字符串剖析为整数。radix 参数是可选的,指定了剖析时所用的进制(比方,10 表示十进制)。
    1. console.log(Number.parseInt("101", 2)); // 输出: 5 (二进制)
    复制代码
  • Number.isNaN(value): 检查给定值是否为 NaN。它比全局的 isNaN() 函数更为严酷,因为后者会尝试将非数字参数转换为数字再举行判定。
    1. console.log(Number.isNaN(NaN)); // true
    2. console.log(Number.isNaN(123)); // false
    复制代码
  • Number.isFinite(value): 检查给定值是否为有限数值(既不是 Infinity 也不是 -Infinity 或 NaN)。
    1. console.log(Number.isFinite(100)); // true
    2. console.log(Number.isFinite(Infinity)); // false
    复制代码
  • Number.isInteger(value): 检查给定值是否为整数。
    1. console.log(Number.isInteger(100)); // true
    2. console.log(Number.isInteger(100.1)); // false
    复制代码
  • Number.isSafeInteger(value): 检查给定值是否为安全整数(即,在 Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER 之间的整数)。
    1. console.log(Number.isSafeInteger(9007199254740991)); // true
    2. console.log(Number.isSafeInteger(9007199254740992)); // false
    复制代码
实例方法

对于通过 new Number(value) 创建的 Number 对象,大概直接使用原始数值(由于主动装箱机制),你可以调用以下方法:


  • .toFixed(fractionDigits): 返回指定小数位数的字符串表示情势。
    1. let num = 123.456;
    2. console.log(num.toFixed(2)); // "123.46"
    复制代码
  • .toExponential(fractionDigits): 返回以指数记法表示的字符串。
    1. let num = 123;
    2. console.log(num.toExponential(2)); // "1.23e+2"
    复制代码
  • .toPrecision(precision): 返回指定精度的有效数字表示的字符串。
    1. let num = 123.456;
    2. console.log(num.toPrecision(4)); // "123.5"
    复制代码
  • .toString(radix): 返回数值的字符串表示,radix 参数是可选的,指定了转换时使用的进制。
    1. let num = 255;
    2. console.log(num.toString(16)); // "ff" (十六进制)
    复制代码
  • .toLocaleString(locales, options): 根据当地化的格式返回数值的字符串表示。locales 参数可以指定语言情况,options 可以指定格式选项。
    1. let num = 123456.789;
    2. console.log(num.toLocaleString('en-US')); // "123,456.789"
    复制代码
请留意,虽然你可以创建 Number 对象来访问这些方法,但在大多数情况下,直接在原始数值上调用这些方法就足够了。JavaScript 的主动装箱机制会临时将原始数值包装成对象,以便可以大概调用这些方法。因此,通常没有必要显式地使用 new Number() 构造函数。
Number 对象的使用发起

在 TypeScript(以及 JavaScript)中使用 Number 对象时,有几点发起可以帮助你编写更有效和更可靠的代码:
1. 避免不必要的 Number 对象实例化



  • 优先使用原始的 number 类型:除非有特殊需求,否则应该避免使用 new Number() 创建 Number 对象。原始数值类型性能更高,且更容易理解。
    1. // 不推荐
    2. let numObj = new Number(42);
    3. // 推荐
    4. let num = 42;
    复制代码
2. 使用静态方法举行数值处理



  • 使用 Number 的静态方法:Number 提供了多个静态方法来剖析字符串、检查数值特性等。直接调用这些静态方法即可,无需创建 Number 实例。
    1. console.log(Number.parseInt("10")); // 使用静态方法 parseInt
    2. console.log(Number.isNaN(NaN));     // 使用静态方法 isNaN
    复制代码
3. 比较相等性时要小心



  • 留意相等性比较:两个不同的 Number 对象纵然包含相同的数值也不会被认为是相等的。因此,在比较数值时,应确保它们都是原始类型的 number。
    1. let a = new Number(10);
    2. let b = new Number(10);
    3. console.log(a == b); // false, 因为它们是不同的对象
    4. console.log(a.valueOf() === b.valueOf()); // true, 比较的是内部的原始值
    复制代码
4. 使用适当的数值检查方法



  • 选择合适的数值检查方法:根据你的需要选择 Number.isNaN, Number.isFinite, Number.isInteger, 或 Number.isSafeInteger 等方法来举行精确的数值属性检查。
    1. console.log(Number.isInteger(100)); // true
    2. console.log(Number.isSafeInteger(9007199254740991)); // true
    复制代码
5. 格式化输出



  • 使用格式化方法:当需要格式化数值输出时,可以使用 .toFixed(), .toExponential(), .toPrecision(), 和 .toLocaleString() 等方法。
    1. let price = 123.456;
    2. console.log(price.toFixed(2)); // "123.46"
    3. console.log(price.toLocaleString('en-US', { style: 'currency', currency: 'USD' })); // "$123.46"
    复制代码
6. 处理浮点数精度题目



  • 意识到浮点数运算的精度题目:JavaScript 中的浮点数运算可能会导致精度丢失的题目。假如需要高精度计算,思量使用第三方库如 decimal.js。
    1. console.log(0.1 + 0.2); // 0.30000000000000004
    复制代码
7. 使用 Number.EPSILON 举行浮点数比较



  • 浮点数比较:对于浮点数的比较,可以使用 Number.EPSILON 来确定两个数是否足够接近,以思量到浮点数的精度限定。
    1. function areCloseEnough(a, b) {
    2.     return Math.abs(a - b) < Number.EPSILON;
    3. }
    4. console.log(areCloseEnough(0.1 + 0.2, 0.3)); // true
    复制代码
总结

总的来说,尽量使用原始的 number 类型,并充分使用 Number 构造函数提供的静态方法。只有当你确实需要一个 Number 对象提供的特定功能时,才应该创建 Number 实例。通过遵循这些发起,你可以写出更加高效和不易出错的代码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表