我有char数组:
a = [ 'm', 'a', 'q', '0', '2', 'o' ]
当我尝试为任何元素扩展数组时:
a[a['0']] = something;
它将'0'视为索引0
为什么会这样?
--- --- EDIT
我想做的是说[a [3]] =某事,这样当我评估['0']时,它会返回'某事';
答案 0 :(得分:4)
它对待' 0'作为索引0
因为[]
表示法的含义是:使用该键查找或分配对象中的属性。 JavaScript aren't really arrays at all中的普通数组,它们只是具有某些特殊行为的对象;语法不是特定于数组的,它是对象的。
如何克服这个?
并在您的编辑中:
我希望做的是
a[a[3]] = something
,这样当我评估a['0']
时,它会返回&#39 ;;
这样可行:
a[a[3]] = 'something';
console.log(a['0']); // something
var a = [ 'm', 'a', 'q', '0', '2', 'o' ]
var something = "foo";
a[a[3]] = 'something';
snippet.log(a['0']); // something

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
由于我们仍然不清楚你要做什么,我所能做的就是告诉你你的代码在做什么:
a[a['0']] = something
是
var x = a['0'];
a[x] = something
...其中,你的数组是
var x = 'm'; // Because a['0'] has the value 'm' in it
a['m'] = something
...在数组对象上放置m
属性:
var a = [ 'm', 'a', 'q', '0', '2', 'o' ]
var something = "foo";
a[a['0']] = something;
snippet.log(a.m); // "foo" -- we're accessing the `m` property of the object
snippet.log(a['m']); // also "foo", you can use either dot notation or brackets notation
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
答案 1 :(得分:1)
我同意其他人的意见。 javascript中的数组不像标准数组那样。但是,如果我根据您的代码示例猜测您可能正在尝试更新其中的对象和数组。如果是这种情况,那么您可以执行以下操作:
a[a.indexOf('0')] = something;