Come creare una proprietà dell’object da un valore variabile in JavaScript?

Voglio aggiungere una nuova proprietà a “myObj”, chiamarla “stringa1” e dargli un valore di “stringa2”, ma quando lo faccio restituisce “undefined:

var myObj = new Object; var a = 'string1'; var b = 'string2'; myObj.a = b; alert(myObj.string1); //Returns 'undefined' alert(myObj.a); //Returns 'string2' 

In altre parole: come posso creare una proprietà dell’object e dargli il nome memorizzato nella variabile, ma non il nome della variabile stessa?

C’è la notazione dei punti e la notazione delle parentesi

 myObj[a] = b; 

ES6 introduce i nomi di proprietà calcolati, che ti permettono di fare

 var myObj = {[a]: b}; 

Nota il supporto del browser è attualmente trascurabile.

La notazione dei punti e le proprietà sono equivalenti. Quindi ti comporteresti in questo modo:

 var myObj = new Object; var a = 'string1'; myObj[a] = 'whatever'; alert(myObj.string1) 

(avvisi “qualunque”)

Ecu, se fai myObj.a , allora cerca la proprietà denominata a di myObj. Se fai myObj[a] =b allora cerca la proprietà a.valueOf() di myObj.

Oneliner:

 obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5); 

O:

 attr = 'hash'; val = 5; var obj = (obj={}, obj[attr]=val, obj); 

Qualcosa di più breve?

Potresti semplicemente usare questo:

 function createObject(propName, propValue){ this[propName] = propValue; } var myObj1 = new createObject('string1','string2'); 

Qualsiasi cosa tu passi come primo parametro sarà il nome della proprietà, e il secondo parametro è il valore della proprietà.

Poiché $ scope è un object, puoi provare con JavaScript:

 $scope['something'] = 'hey' 

È uguale a:

 $scope.something = 'hey' 

Ho creato un violino per testare .

Non è ansible utilizzare una variabile per accedere a una proprietà tramite notazione punto, utilizzare invece la notazione array.

 var obj= { 'name' : 'jroi' }; var a = 'name'; alert(obj.a); //will not work alert(obj[a]); //should work and alert jroi' 

Di seguito viene illustrato un approccio alternativo per la restituzione di un object coppia di chiavi utilizzando la forma di (a, b) . Il primo esempio utilizza la stringa 'key' come nome della proprietà e 'val' come valore.

Esempio 1:

 (function(o,a,b){return o[a]=b,o})({},'key','val'); 

Esempio: n. 2:

 var obj = { foo: 'bar' }; (function(o,a,b){return o[a]=b,o})(obj,'key','val'); 

Come mostrato nel secondo esempio, questo può modificare anche gli oggetti esistenti (se la proprietà è già definita nell’object, il valore verrà sovrascritto) .

Risultato n. 1: { key: 'val' }

Risultato n. 2: { foo: 'bar', key: 'val' }