Si observa la especificación ECMAScript 3, verá que los tipos de valores primitivos Null y Undefined no tienen objetos Null y Undefined acompañantes.¿Por qué los literales de los números no tienen acceso a los métodos numéricos?
>> Null
ReferenceError: Null is not defined
Los otros tipos de valor primitivo número, cadena y tipos de Boole ¿Tiene Número acompaña, cuerdas y objetos de Boole, que se puede hacer referencia de ámbito global.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
El propósito de estos tipos de valor primitivo es proporcionar métodos tales como toString
y valueOf
por sus respectivos tipos de valores primitivos:
>>var n = 1;
>>n.toString();
"1"
es la misma que
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
booleanos y las cadenas también funcionan de esta manera:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
Se puede ver que los objetos de valor primitivos están utilizando los métodos de su objeto que acompaña al intentar 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 este tipo de literales booleanos y de cadena, puede llamar a estos métodos directamente desde lo literal:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
los valores primitivos nula e indefinido, ya que no tienen que acompaña objetos nulos y no definidos no puede hacer estas cosas:
>>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 toString
en un literal si se utiliza directamente el método de objeto prototipo del Número:
>>Number.prototype.toString.call(1);
"1"
Pero no se puede acceder al método de lo literal en sí como se hace con las cadenas y booleanos:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
Por qué ¿Es que los literales numéricos se comportan de forma diferente de booleanos y de cadenas aunque haya un objeto Number?
ver también [¿Por qué no puedo acceder a una propiedad de un entero con un solo punto?] (http://stackoverflow.com/q/9380077/1048572) – Bergi
Oh, buenos puntos. No estaba seguro Esa otra publicación tenía buena información. ¡Gracias! –