Se si osservano le specifiche ECMAScript 3, i tipi di valori primitivi Null e Undefined non hanno gli oggetti Null e Undefined di accompagnamento.Perché i letterali numerici non hanno accesso ai metodi numerici?
>> Null
ReferenceError: Null is not defined
Gli altri tipi di valore primitivo numero, una stringa e tipi booleani ce l'ho, Numero di accompagnamento, String e gli oggetti booleani che è possibile fare riferimento da portata globale.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
Lo scopo di questi tipi di valore primitivo è quello di fornire metodi come toString
e valueOf
per i rispettivi tipi di valore primitivo:
>>var n = 1;
>>n.toString();
"1"
è uguale
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
booleani e stringhe funzionano anche in questo modo:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
Si può vedere che gli oggetti di valore primitivo stanno usando i metodi di oggetto che accompagna quando si tenta di mescolare tipi:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
abbastanza interessante per i tipi di letterali booleani e stringhe, è possibile chiamare questi metodi direttamente da letterale:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
valori primitivi nullo e indefinito, poiché non hanno accompagnamento oggetti nulli e non definiti non possono fare queste cose:
>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method 'toString' of null
Il numero del tipo di valore primitivo si comporta come un mix dei due. È possibile chiamare toString
su un letterale, se si utilizza direttamente il metodo dell'oggetto prototipo del numero:
>>Number.prototype.toString.call(1);
"1"
Ma non si può accedere al metodo dal letterale stesso come si può con le stringhe e booleani:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
Perché è che i numeri letterali si comportano in modo diverso da booleano e stringa anche se c'è un oggetto Numero?
vedi anche [Perché non riesco ad accedere a una proprietà di un intero con un singolo punto?] (http://stackoverflow.com/q/9380077/1048572) – Bergi
Oh, buoni punti. Non ero sicuro Quell'altro post aveva buone informazioni. Grazie! –