Javascript对象(动态属性名称)
Javascript Objects (dynamic attribute names)
如果我有一个对象,比如这个
var o = {
test : 1
}
我想要第二个对象,它的键之一应该是o.test的值。类似这样的东西:
var o2 = {
o.test : "bla"
}
我知道这是不可能的,但有没有像我现在这样更好(更干净)的方法呢?
目前我所做的是:
var o2 = {};
o2[o.test] = "bla"
我想有更好的方法吗?
我想有更好的方法吗?
假设我正确理解了你的问题,那么不,不是真的。你展示的方法就是这样做的。没有办法在文字本身内部使用动态键,所以你必须首先声明它,然后单独分配属性:
var o2 = {};
o2[o.test] = "bla";
o2; // { 1: "bla" }
更新
详细信息在规范中给出。以下是对象文字属性标识符的语法:
属性名称:
标识符名称
StringLiteral
NumericLiteral
StringLiteral的生成是不言自明的。以下是IdentifierName产品的作用:
生产PropertyName:IdentifierName的评估如下:
- 返回字符串值,该值包含与标识符名称相同的字符序列
对于NumericLiteral生产:
生产PropertyName:NumericLiteral的评估如下:
- 设nbr是形成NumericLiteral的值的结果
- 返回ToString(nbr)
从中可以看出,在对象初始化程序中,除了字符串之外,不可能使用其他任何东西。
您的Object属性可以是任何字符串
var o = {
"whatever you want":1,
"1":"numbers too"
}
o[2]="no numbers, convert to string"
console.log(o["whatever you want"]);//=1
console.log(o["1"]);//=numbers too
console.log(o[new String(2)]);//=no numbers, convert to string
// as James commented, you don't have to convert to string
// I usually do that as to not confuse the object with an array
console.log(o[2]);//=no numbers, convert to string
如果你所有的"属性名称"都是正整数或0,你可以使用一个数组:
var arr=new Array();//or var arr=[];
var b=22;
arr[10000]="hi";
arr[b]="value";
// normally you would do for(var i=0;len=arr.length;i<len;i++){...arr[i]
// but because there may be many empty spots it's quicker to do:
for(thing in arr){
if(arr.hasOwnProperty(thing)){
console.log(thing + " is " + arr[thing]);
}
}
这是javascript,几乎总是有一个变通方法来做你想做的事情。
做你想做的事情没有语法,但你当然可以写一个函数来做:
function make () {
// Optional sanity check:
if (arguments.length % 2) throw "Number of arguments should be even!";
var obj = {};
for (var name=0,val=1; name < arguments.length; name+=2,val+=2) {
obj[arguments[name]] = arguments[val];
}
return obj;
}
现在你可以写这个了:
var o2 = make(
o.test, 'bla',
'another_key', 'another_val'
);
相关文章:
- 将特定属性动态添加到元素中
- Google Closure Advanced |无法识别对象属性|动态属性
- 从数据属性动态获取 JQuery Ajax 请求的 URL
- 如何在 javascript 中使用 Onclick 属性动态创建对象
- 如何根据 JSON 对象的属性动态填充 Angular JS 中的显示对象
- 通过html标签数据属性动态加载js、css文件
- 使用jquery中的css属性动态设置宽度值
- HTML-为属性动态创建输入标签
- 将onmouseover属性动态添加到锚点标记
- 如何在php中使用onclick事件属性动态创建链接标记
- 在HTML中将标题属性动态添加到URL
- 当通过“链接”属性动态进行更改时,Angular 指令无法正常工作
- 如何从元素的href属性动态更改javascript调用的参数
- 改变“polar"属性动态使用Highcharts
- 如何添加自定义属性动态选择选项,以及如何获取它使用javascript或dojo
- 如何使用下拉菜单和HTML5数据属性动态更改HTML元素的分组
- 修改缩略图脚本中的放大图像,以根据其大小属性动态显示图像
- HTML元素属性动态分配
- 如何使用'd'属性动态地设置为SVG
- 将属性动态应用于指令中ngRepeat中的DOM元素