网站搜索

javascript - Number() 和 Number().valueOf() 有区别吗


我碰到了一个示例,它试图使用以下代码检查数字是否属于特定范围:

class RangeValidationBase {
  constructor(private start: number, private end: number) {}
  
  protected RangeCheck(value: number): boolean {
    return value >= this.start && value <= this.end;
  }
  
  protected GetNumber(value: string): number {
    return new Number(value).valueOf();
  }
}

使用 new Number().valueOf() 而不是 Number() 有什么用?是否有一些情况下使用 new Number().valueOf() 比另一个更优,因为对我这个新手来说它们看起来一样?

答案#1

使用 new Number().valueOf() 而不是 Number() 有什么用?

没有。他们对所有输入的行为都是一样的,除了技术上Number或Number.prototype.valueOf可能在不良环境中被替换,这可能使new Number选项对于引擎来说更难优化,因此在实际中稍微低效一点。

有没有任何情况下使用 new Number().valueOf() 比其他方式更优先

不,除了一些错误的内部风格之外。有充分的理由更倾向于使用简单的 Number(value):

  • 上述行为技术性问题

  • 避免使用像 new Number() 产生的原始包装类型是一个好习惯,因为它们的行为与原始类型不够接近,无法比包含数值属性的普通对象更有用(例如),而且通常会令人困惑。即使在这种情况下包装器会立即被丢弃,但它仍然是一个红旗,既容易被人类注意到,也会被代码检查工具发现。