Me encontré con un ejemplo que intenta verificar si el número es parte de un rango particular usando el siguiente código:
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();
}
}
¿De qué sirve usar new Number().valueOf() en lugar de Number() ? y ¿hay algún caso en el que se prefiera usar el new Number().valueOf() sobre el otro, ya que ambos parecen iguales para mi cerebro novato?
¿De qué sirve usar
new Number().valueOf()en lugar deNumber()?
Ninguna. Su comportamiento es el mismo para todas las entradas, aparte del tecnicismo de que Number o Number.prototype.valueOf podrían reemplazarse en un mal entorno, lo que probablemente hace que la new Number sea más difícil de optimizar para los motores y, por lo tanto, un poco menos eficiente en la práctica.
¿Hay algún caso en el que se prefiera el uso de
new Number().valueOf()sobre el otro?
No, excepto en algún estilo interno equivocado. Hay buenas razones para preferir un Number(value) :
el tecnicismo de comportamiento antes mencionado
Es una buena práctica evitar los tipos de contenedores primitivos como el producido por new Number() , porque no se comportan lo suficientemente cerca de los primitivos para ser más útiles que un objeto simple que contiene una propiedad de número (por ejemplo), y generalmente son confusos. . Aunque el envoltorio se descarta inmediatamente en este caso, es una señal de alerta, detectada tanto por humanos como por linters .