'myObj'に新しいプロパティを追加して 'string1'という名前を付け、 'string2'の値を指定したいのですが、実行すると 'undefined:が返されます。
var myObj = new Object;
var a = 'string1';
var b = 'string2';
myObj.a = b;
alert(myObj.string1); //Returns 'undefined'
alert(myObj.a); //Returns 'string2'
言い換えれば、オブジェクトプロパティを作成し、それに変数に格納されている名前を付けるが、変数自体の名前は付けないのですか?
ドット表記とブラケット表記 があります
myObj[a] = b;
ES6では、計算プロパティ名が導入されています。
var myObj = {[a]: b};
注意ブラウザのサポートは現在ごくわずかです。
ドット表記とプロパティは同等です。それで、あなたはそのように達成するでしょう:
var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)
(「何でも」という警告)
Ecu、myObj.a
を実行すると、myObjのaという名前のプロパティを探します。 myObj[a] =b
を実行すると、myObjのa.valueOf()
プロパティを探します。
オネリナー:
obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5);
または
attr = 'hash';
val = 5;
var obj = (obj={}, obj[attr]=val, obj);
もっと短いものはありますか?
あなたはこれを使うことができます:
function createObject(propName, propValue){
this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');
最初のパラメータとして渡すものはすべてプロパティ名になり、2番目のパラメータはプロパティ値になります。
$ scopeはオブジェクトなので、JavaScriptを使って試すことができます。
$scope['something'] = 'hey'
それはに等しいです:
$scope.something = 'hey'
ドット表記でプロパティにアクセスするために変数を使用することはできません。代わりに配列表記を使用してください。
var obj= {
'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'
以下は、(a, b)
の形式を使用してキーペアオブジェクトを返すための代替アプローチを示しています。最初の例では、プロパティ名として'key'
、値として'val'
を使用しています。
例1:
(function(o,a,b){return o[a]=b,o})({},'key','val');
例:#2:
var obj = { foo: 'bar' };
(function(o,a,b){return o[a]=b,o})(obj,'key','val');
2番目の例に示すように、これは既存のオブジェクトも変更することができます(プロパティがすでにオブジェクトで定義されている場合、値は上書きされます)。
結果#1:
{ key: 'val' }
結果#2:
{ foo: 'bar', key: 'val' }