Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Números y fechas
Este capítulo presenta los conceptos, objetos y funciones que se utilizan para trabajar y realizar cálculos utilizando números y fechas en JavaScript. Esto incluye el uso de números escritos en varias bases, incluyendo decimal, binario y hexadecimal, así como el uso del objeto globalMath para realizar una amplia variedad de operaciones matemáticas con números.
In this article
Números
En JavaScript, los números se implementan enFormato en coma flotante de doble precisión de 64 bits IEEE 754 (es decir, un número entre ±2−1022 y ±2+1023, o aproximadamente ±10−308 a ±10+308, con una precisión numérica de 53 bits). Los valores enteros hasta ±253 - 1 se pueden representar con exactitud.
Además de poder representar números de punto flotante, el tiponumber tiene tres valores simbólicos:+Infinity,-Infinity yNaN (Not-a-Number, no es un número).
Una adición más reciente a JavaScript es elBigInt que te permite representar números enteros que pueden ser muy grandes. Sin embargo, existen advertencias para usarBigInt; por ejemplo, no puedes mezclar y hacer coincidir los valoresBigInt yNumber en la misma operación, y no puedes usar el objetoMath con valoresBigInt.
Consulta tambiénestructuras y tipos de datos JavaScript para conocer el contexto con otros tipos primitivos en JavaScript.
Puedes utilizar cuatro tipos de literales numéricos: decimal, binario, octal y hexadecimal.
Números decimales
1234567890;42;// Precaución al usar ceros a la izquierda:0888; // 888 procesado como decimal0777; // procesado como octal en modo no estricto (511 en decimal)Ten en cuenta que los decimales literales pueden comenzar con un cero (0) seguido de otro dígito decimal, pero si cada dígito después del0 inicial es menor que 8, el número se procesa como un número octal.
Números binarios
La sintaxis de números binarios utiliza un cero inicial seguido de una letra "B" latina en minúscula o mayúscula (0b o0B). Si los dígitos después del0b no son 0 o 1, el siguienteSyntaxError se lanza un: "Faltan dígitos binarios después de 0b".
var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040var FLT_MANTISSA = 0b00000000011111111111111111111111; // 8388607Números octales
La sintaxis de números octales utiliza un cero a la izquierda. Si los dígitos después del0 están fuera del rango de 0 a 7, el número se interpretará como un número decimal.
var n = 0755; // 493var m = 0644; // 420El modo estricto en ECMAScript 5 prohíbe la sintaxis octal. La notación octal no es parte de ECMAScript 5, pero la admiten todos los navegadores al poner como prefijo un cero al número:0644 == 420 y"\045" === "%". En ECMAScript 2015, los números octales son compatibles si tienen el prefijo0o, por ejemplo:
var a = 0o10; // ES2015: 8Números hexadecimales
La sintaxis de números hexadecimales utiliza un cero inicial seguido de una letra "X" latina en minúscula o mayúscula (0x o0X). Si los dígitos después de0x están fuera del rango (0123456789ABCDEF), el siguienteSyntaxError se lanza: "El identificador comienza inmediatamente después del literal numérico".
0xfffffffffffffffff; // 2951479051793528300000x123456789abcdef; // 819855292164869000xa; // 10Exponenciación
1e3; // 10002e6; // 20000000.1e2; // 10El objetoNumber
El objeto integradoNumber tiene propiedades para constantes numéricas, como valor máximo,NaN (no un número) einfinity. No puedes cambiar los valores de estas propiedades y las debes usar de la siguiente manera:
var biggestNum = Number.MAX_VALUE;var smallestNum = Number.MIN_VALUE;var infiniteNum = Number.POSITIVE_INFINITY;var negInfiniteNum = Number.NEGATIVE_INFINITY;var notANum = Number.NaN;Siempre haces referencia a una propiedad del objetoNumber predefinido como se muestra arriba, y no como una propiedad de un objetoNumber que creas tú mismo.
La siguiente tabla resume las propiedades del objetoNumber.
| Propiedad | Descripción |
|---|---|
Number.MAX_VALUE | El número representable más grande (±1.7976931348623157e+308) |
Number.MIN_VALUE | El número representable más pequeño (±5e-324) |
Number.NaN | Valor especialnot a number ("no es un número") |
Number.NEGATIVE_INFINITY | Valor infinito negativo especial; devuelto por desbordamiento |
Number.POSITIVE_INFINITY | Valor infinito positivo especial; devuelto por desbordamiento |
Number.EPSILON | Diferencia entre1 y el valor más pequeño mayor que1 que se puede representar como unNumber (2.220446049250313e-16) |
Number.MIN_SAFE_INTEGER | Número entero seguro mínimo en JavaScript (−253 + 1 o−9007199254740991) |
Number.MAX_SAFE_INTEGER | Máximo número entero seguro en JavaScript (+253 - 1 o+9007199254740991) |
| Método | Descripción |
|---|---|
Number.parseFloat() | Analiza un argumento de cadena y devuelve un número de punto flotante. Igual que la funciónparseFloat() global. |
Number.parseInt() | Analiza un argumento de cadena y devuelve un número entero de la base o raíz especificada. Igual que la funciónparseInt() global. |
Number.isFinite() | Determina si el valor pasado es un número finito. |
Number.isInteger() | Determina si el valor pasado es un número entero. |
Number.isNaN() | Determina si el valor pasado esNaN. Versión más robusta delisNaN() global original. |
Number.isSafeInteger() | Determina si el valor proporcionado es un número que es unentero seguro. |
El prototipoNumber proporciona métodos para recuperar información de objetosNumber en varios formatos. La siguiente tabla resume los métodos deNumber.prototype.
| Método | Descripción |
|---|---|
toExponential() | Devuelve una cadena que representa el número en notación exponencial. |
toFixed() | Devuelve una cadena que representa el número en notación de punto fijo. |
toPrecision() | Devuelve una cadena que representa el número con una precisión especificada en notación de punto fijo. |
El objetoMath
El objeto integradoMath tiene propiedades y métodos para constantes y funciones matemáticas. Por ejemplo, la propiedadPI del objetoMath tiene el valor depi (3.141...), que usarías en una aplicación como:
Math.PI;De manera similar, las funciones matemáticas estándar son métodos deMath. Estas incluyen funciones trigonométricas, logarítmicas, exponenciales y otras. Por ejemplo, si deseas utilizar la función trigonométrica «seno», debes escribir
Math.sin(1.56);Ten en cuenta que todos los métodos trigonométricos deMath toman argumentos en radianes.
La siguiente tabla resume los métodos del objetoMath.
| Método | Descripción |
|---|---|
abs() | Valor absoluto |
sin(),cos(),tan() | Funciones trigonométricas estándar; con el argumento en radianes. |
asin(),acos(),atan(),atan2() | Funciones trigonométricas inversas; devuelven valores en radianes. |
sinh(),cosh(),tanh() | Funciones hiperbólicas; argumento en ángulo hiperbólico. |
asinh(),acosh(),atanh() | Funciones hiperbólicas inversas; devuelven valores en ángulo hiperbólico. |
pow(),exp(),expm1(),log10(),log1p(),log2() | Funciones exponenciales y logarítmicas. |
floor(),ceil() | Devuelve el entero más grande/más pequeño menor/mayor o igual que un argumento. |
min(),max() | Devuelven el valor mínimo o máximo (respectivamente) de una lista de números separados por comas como argumentos. |
random() | Devuelve un número aleatorio entre 0 y 1. |
round(),fround(),trunc(), | Funciones de redondeo y truncamiento. |
sqrt(),cbrt(),hypot() | Raíz cuadrada, raíz cúbica, raíz cuadrada de la suma de argumentos cuadrados. |
sign() | El signo de un número, que indica si el número es positivo, negativo o cero. |
clz32(),imul() | Número de bits cero iniciales en la representación binaria de 32 bits. El resultado de la multiplicación de 32 bits similar a C de los dos argumentos. |
A diferencia de muchos otros objetos, nunca creas un objetoMath propio. Siempre usas el objetoMath incorporado.
El objetoDate
JavaScript no tiene un tipo de dato para fechas. Sin embargo, puedes utilizar el objetoDate y sus métodos para trabajar con fechas y horas en tus aplicaciones. El objetoDate tiene una gran cantidad de métodos para establecer, obtener y manipular fechas. Pero no tiene propiedades.
JavaScript maneja las fechas de manera similar a Java. Los dos lenguajes tienen muchos de los mismos métodos de fecha, y ambos lenguajes almacenan fechas como el número de milisegundos desde el 1 de enero de 1970, 00:00:00, con una marca de tiempo Unix que es el número de segundos desde el 1 de enero de 1970, 00: 00:00.
El rango del objetoDate es de -100,000,000 de días a 100,000,000 de días en relación con el 1 de enero de 1970 UTC.
Para crear un objetoDate:
var dateObjectName = new Date([parameters]);dondedateObjectName es el nombre del objetoDate que se está creando; puede ser un objeto nuevo o una propiedad de un objeto existente.
Llamar aDate sin la palabra clavenew devuelve una cadena que representa la fecha y hora actuales.
Los parámetros de la sintaxis anterior pueden ser cualquiera de los siguientes:
- Nada: crea la fecha y hora de hoy. Por ejemplo,
today = new Date();. - Una cadena que representa una fecha en la siguiente forma: "Mes día, año horas:minutos:segundos." Por ejemplo,
var Xmas95 = new Date("December 25, 1995 13:30:00"). Si omites horas, minutos o segundos, el valor se establecerá en cero. - Un conjunto de valores enteros para año, mes y día. Por ejemplo,
var Xmas95 = new Date(1995, 11, 25). - Un conjunto de valores enteros para año, mes, día, hora, minuto y segundos. Por ejemplo,
var Xmas95 = new Date(1995, 11, 25, 9, 30, 0).
Métodos del objetoDate
Los métodos del objetoDate para manejar fechas y horas se incluyen en estas categorías generales:
- métodos establecedores ("
set"), para configurar valores de fecha y hora en objetosDate. - Métodos captadores ("
get"), para obtener valores de fecha y hora de objetosDate. - métodos conversores ("
to"), para devolver valores de cadena de objetosDate. - métodos
parseyUTC, para analizar cadenas deDate.
Con los métodos "get" y "set" puedes obtener y establecer segundos, minutos, horas, día del mes, día de la semana, meses y años por separado. Existe un métodogetDay que devuelve el día de la semana, pero no existe el métodosetDay correspondiente, porque el día de la semana se establece automáticamente. Estos métodos utilizan números enteros para representar estos valores de la siguiente manera:
- Segundos y minutos: 0 a 59
- Horas: 0 a 23
- Día: 0 (Domingo) a 6 (Sábado)
- Fecha: 1 al 31 (día del mes)
- Meses: 0 (Enero) a 11 (Diciembre)
- Año: años desde 1900
Por ejemplo, supongamos que defines la siguiente fecha:
var Xmas95 = new Date("December 25, 1995");Entonces,Xmas95.getMonth() devuelve 11 yXmas95.getFullYear() devuelve 1995.
Los métodosgetTime ysetTime son útiles para comparar fechas. El métodogetTime devuelve el número de milisegundos desde el 1 de enero de 1970, 00:00:00 para un objetoDate.
Por ejemplo, el siguiente código muestra el número de días que quedan en el año actual:
var today = new Date();var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Establece día y mesendYear.setFullYear(today.getFullYear()); // Establece año a este añovar msPerDay = 24 * 60 * 60 * 1000; // Número de milisegundos por díavar daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;var daysLeft = Math.round(daysLeft); // devuelve los días que quedan en el añoEste ejemplo crea un objetoDate llamadotoday que contiene la fecha de hoy. Luego crea un objetoDate llamadoendYear y establece el año en el año actual. Luego, usando la cantidad de milisegundos por día, calcula la cantidad de días entretoday yendYear, usandogetTime y redondeando a un número entero de días.
El métodoparse es útil para asignar valores de cadenas de fecha a objetosDate existentes. Por ejemplo, el siguiente código usaparse ysetTime para asignar un valor de fecha al objetoIPOdate:
var IPOdate = new Date();IPOdate.setTime(Date.parse("Aug 9, 1995"));Ejemplo
En el siguiente ejemplo, la funciónJSClock() devuelve la hora en el formato de un reloj digital.
function JSClock() { var time = new Date(); var hour = time.getHours(); var minute = time.getMinutes(); var second = time.getSeconds(); var temp = "" + (hour > 12 ? hour - 12 : hour); if (hour == 0) temp = "12"; temp += (minute < 10 ? ":0" : ":") + minute; temp += (second < 10 ? ":0" : ":") + second; temp += hour >= 12 ? " P.M." : " A.M."; return temp;}La funciónJSClock primero crea un nuevo objetoDate llamadotime; dado que no se dan argumentos, la hora se crea con la fecha y hora actuales. Luego, las llamadas a los métodosgetHours,getMinutes ygetSeconds asignan el valor de la hora, minuto y segundo actuales ahour,minute ysecond.
Las siguientes cuatro declaraciones crean un valor de cadena basado en el tiempo. La primera declaración crea una variabletemp, asignándole un valor mediante una expresión condicional; sihour es mayor que 12, (hour - 12), de lo contrario, simplemente hora, a menos que la hora sea 0, en cuyo caso se convierte en 12.
La siguiente declaración agrega un valor deminute atemp. Si el valor deminute es menor que 10, la expresión condicional agrega una cadena con un cero precedente; de lo contrario, agrega una cadena con dos puntos de demarcación. Luego, una declaración agrega un valor de segundos atemp de la misma manera.
Finalmente, una expresión condicional agrega "P.M." atemp sihour es 12 o mayor; de lo contrario, agrega "A.M." atemp.