如何在javascript中创建一个具有非法密钥名称的对象



我喜欢用javascript/node.js创建一个对象,在键名的中间加破折号。

这是我今天使用的一个数组,需要转换为一个对象。

var data = new Array();
data['__type'] = 'urn:inin.com:connection:icAuthConnectionRequestSettings';
data['applicationName'] = 'test';
data['userID'] = 'blah';
data['password'] = 'blah;
data['val-name'] = 'blah;

如何创建一个对象的键像这样的val-name

我有几分钟空闲时间。所以,代码审查还在继续。

var data = new Array();
data['__type'] = 'urn:inin.com:connection:icAuthConnectionRequestSettings';
data['applicationName'] = 'test';
data['userID'] = 'blah';
data['password'] = 'blah;
data['val-name'] = 'blah;

首先,我认为你在这段代码中有一些排版错误。最后两个值有一对奇怪的引号

var data = new Array();
data['__type'] = 'urn:inin.com:connection:icAuthConnectionRequestSettings';
data['applicationName'] = 'test';
data['userID'] = 'blah';
data['password'] = 'blah';
data['val-name'] = 'blah';

接下来,现在,您将为数组分配键。这可能不是你的意思(这里是问题的总结;简而言之,有些收集方法会产生意想不到的结果)。您的意思可能是启动一个空对象,如data

var data = {};
data['__type'] = 'urn:inin.com:connection:icAuthConnectionRequestSettings';
data['applicationName'] = 'test';
data['userID'] = 'blah';
data['password'] = 'blah';
data['val-name'] = 'blah';

最后,你可以在JS中使用数据字面量,而不是串行赋值。

var data = {
    '__type': 'urn:inin.com:connection:icAuthConnectionRequestSettings',
    'applicationName': 'test',
    'userID': 'blah',
    'password': 'blah',
    'val-name': 'blah'
}

作为其中的一部分,您已经创建了一个具有插槽名称的对象,其中包含-。这并没有什么违法的,但它确实阻止了你用点符号访问那个槽。

console> data['val-name']
'blah'
console> data.val-name
NaN

这与键是否非法无关,而是与将访问解析为减法有关。也就是说,data.val-name被解释为"从data.val的值中减去name的值"而不是"访问对象data的槽位val-name"。

最新更新