javascript - sirven - raices de ecuaciones metodos numericos
¿Por qué los literales de números no tienen acceso a los métodos numéricos? (3)
Esta pregunta ya tiene una respuesta aquí:
Si observas la especificación ECMAScript 3, verás que los tipos de valores primitivos Null y Undefined no tienen objetos Null y Undefined acompañantes.
>> Null
ReferenceError: Null is not defined
Los otros tipos de valores primitivos, Number, String y Boolean tienen los objetos Number, String y Boolean acompañantes, a los que puede hacer referencia desde el alcance global.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
El propósito de estos tipos de valores primitivos es proporcionar métodos como toString
y valueOf
para sus respectivos tipos de valores primitivos:
>>var n = 1;
>>n.toString();
"1"
es lo mismo que
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Booleanos y cadenas también funcionan de esta manera:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
Puede ver que los objetos de valores primitivos usan los métodos de su objeto acompañante cuando intenta mezclar tipos:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Curiosamente para tipos booleanos y literales de cadenas, puede llamar a estos métodos directamente desde el literal:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
Los valores primitivos nulos e indefinidos, ya que no tienen los objetos Nulo y No definido acompañantes, no pueden hacer lo siguiente:
>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method ''toString'' of null
El número de tipo de valor primitivo se comporta como una mezcla de los dos. Puede llamar a toString
en un literal si usa directamente el método del objeto prototipo del Número:
>>Number.prototype.toString.call(1);
"1"
Pero no puedes acceder al método desde el literal en sí, como lo haces con cadenas y booleanos:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
¿Por qué los números literales se comportan de forma diferente de boolean y string a pesar de que hay un objeto Number?
Creo que encontrará una respuesta a su pregunta en esta respuesta a otra pregunta de Desbordamiento de pila. Para resumir la respuesta de Theo :
[E] l analizador espera que un número seguido de un punto sea un literal de coma flotante. [...] [S] solo tienes que agregar otro punto para que funcione [.]
Null (capital N) es un nombre de variable. Las palabras reservadas distinguen mayúsculas de minúsculas. null es el objeto nulo. typeof null === "object" // true
Puede acceder a él de la misma manera, aquí se trata de un problema de análisis diferente, para hacerlo, use una sintaxis ligeramente diferente:
(1).toString()
Los números pueden tener decimales, por lo que la sintaxis para terminar en un decimal es un poco ambigua cuando vas a analizar el código, usa paréntesis para que sea válido. Es un poco más claro cuando ves que esto también es válido:
(1.).toString()
Sin embargo, con solo 1.toString()
está intentando analizar como un número con un decimal , y falla.