x.field = true;
x.field.netType = "System.Boolean";
in realtà funziona.
x.field
che è un valore booleano primitivo viene convertito in oggetto internamente ma non abbiamo un riferimento di esso così immediatamente diventa immondizia. Se memorizziamo il valore di x.field
in modo che non sia spazzatura, possiamo ottenere il valore. come questo ....
x.field = true;
var y = x.field.netType = "System.Boolean";
alert(y);
Se si scrive codice come questo si
var x = {};
x.field = {};
x.field.netType = "System.Boolean";
alert(x.field.netType);
allora funzionerà.
Nel codice questa linea x.field.netType = "System.Boolean";
getterà errore nel `modalità rigorosa
`//Cannot assign to read only property 'netType' of true`
Perché questa linea x.field.netType
dà undefined
oggetti di questo tipo sono soltanto involucri, il loro valore è il primitivo che avvolgere e saranno generalmente coercitivo fino a questo valore, come richiesto.
JavaScript può forzare facilmente tra primitives and objects
.
var a = 'Intekhab';
a.length;//In this case the string value is coerced to a string object in order to access the property length.
var Twelve = new Number(12);
var fifteen = Twelve + 3; // In this case Object Twelve is coerced to a primitive value.
fifteen; //15
Se JavaScript rileva un tentativo di assegnare un immobile ad un primitivo sarà infatti costringere il primitivo a un oggetto. Questo nuovo oggetto non ha riferimenti e diventerà immediatamente un foraggio per la garbage collection.
var primitive = "september";
primitive.vowels = 3;
//new object created to set property
(new String("september")).vowels = 3;
primitive.vowels;
//another new object created to retrieve property
(new String("september")).vowels; //undefined
gettare in ' 'use strict';' in alto e vedere la magia ;-) – thefourtheye
@thefourtheye? cosa farebbe la modalità rigorosa qui? – Pointy
@Pointy Reclami. Si lamenterebbe. La modalità rigorosa è quella ragazza schizzinosa che non ti lascia fare le cose più allettanti, mentre la modalità non rigorosa è oposite. –