使用数字键访问非数字密钥对象是有效的JavaScript吗?

时间:2013-01-08 19:36:28

标签: javascript object key numeric

我有一个对象

data = {
    'choiceA' : 'Long-Wear',
    'choiceB' : 'Anti-Age Lifting/Firming',
    'choiceC' : 'Replenishing/ Moisturizing',
    'choiceD' : 'Natural/ True-to-Skin',
    'choiceE' : 'Smoothing/ Illuminating'
}    

我需要检索给定整数的第四个值

 position = 3;
通常我会写

 key = $.inArray( position, ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE']);
 answer = data[key];

但用这样的数字键直接访问对象是有效的javascript吗?

 answer = data[position];  // where position is an integer

编辑:
我写的一些不好的代码,因为我正在向后使用$ .inArray! 我打算写

 arr = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'];
 key = arr[position];
 answer = data[key];

3 个答案:

答案 0 :(得分:4)

不,在你有数字对象“keys”之前它是无效的,即

data = {
    '1' : 'Long-Wear',
    '2' : 'Anti-Age Lifting/Firming',
    '3' : 'Replenishing/ Moisturizing',
    '4' : 'Natural/ True-to-Skin',
    '5' : 'Smoothing/ Illuminating'
};

另外,需要注意的是,JavaScript对象中的属性未排序。所以你的解决方案是我认为最好的方式。

答案 1 :(得分:2)

如果您尝试过它,您会发现它无效。甚至更多它不起作用!

data[position]

将在您的示例中返回undefined ...

答案 2 :(得分:2)

两件事:

  1. Javascript键始终是字符串。如果您传递其他内容(例如,数字),则会将其转换为字符串。 (例如,尝试使用array["3"]索引数组,它应该可以正常工作

  2. Javascript对象订购!您无法轻松取回第i个键值对。相反,你应该使用一个数组来存储东西(或类似的东西):

    data = [
        { name:'choiceA', value: 'Long-Wear'},
        { name:'choiceB', value: 'Anti-Age Lifting/Firming'}
    ];
    

    如果你不能改变数据表示,你可以做的一件事是使用for-in循环和计数变量迭代你的对象。但是,这种方法不可移植,因为并非所有浏览器都按照定义键的顺序进行迭代。