2

您好我正在尝试打印出数组中的第一个元素和附加到该元素的元素。我在 Firefox 中得到“helloh”,在 IE 中得到“helloundefined”。有谁知道为什么这不起作用。

这是一个jsfiddle .. http://jsfiddle.net/ZtuAu/

<script language=javascript> 
var test = new Array();
test[0] = new Array();

test[0] = "hello";
test[0][0] = "world";
document.write(test[0] + test[0][0]);
</script>
4

4 回答 4

3

test[0]只能有一个值。你试图给它两个值。而且,您还会发现只有一些浏览器允许使用数组语法来检索字符串中的特定字符。

首先,你这样做:

test[0] = new Array();

然后,你这样做:

test[0] = "hello";

第二个替换您的第一个,因此test[0]不包含数组,它包含一个字符串"hello",因此何时执行此操作:

test[0][0] = "world"

您正在尝试分配字符串对象不允许的字符串(因此它什么也不做) [0]"hello"test[0]

然后,当您尝试读取语句时,test[0][0]您正在document.write()尝试[0]对. 字符串对象在技术上不允许使用数组语法对字符串进行索引,但一些浏览器仍然允许它作为从字符串中检索单个字符的快捷方式。这就是为什么您在不同的浏览器中得到不同结果的原因(它返回字符串的第 0 个字符,即)。"hello"test[0]"hello""h"

注意:如果您确实想要检索字符串的特定字符,请使用charAt(n). 有关文档,请参阅MDN

也许你想做的是:

<script language=javascript> 
var test = new Array();
test[0] = "hello";
test[1] = "world";
document.write(test[0] + test[1]);
</script>
于 2012-08-20T20:15:25.707 回答
0

在第三行 ( test[0] = new Array();),您设置test[0]了一个新数组。

在下一行 ( test[0] = "hello";) 中,将其设置为字符串。

然后test[0][0] = "world";尝试将该字符串的第一个索引设置为“world”。
这就像尝试做的那样"hello"[0] = "world";。你不能那样做。JavaScript 中的 String 对象是不可变的。


var test = Array();制作一维结构......像这样:

0 - [_]
1 - [_]
2 - [_]
3 - [_]
4 - [_]

然后,将第一个点设置为一个新数组为其提供了第二个维度(但仅在第一个点中)。

0 - [_][_][_][_][_]
1 - [_]
2 - [_]
3 - [_]
4 - [_]

然后,将第一个位置设置为"Hello"摆脱您放置在那里的阵列。

0 - ["Hello"]
1 - [_]
2 - [_]
3 - [_]
4 - [_]

此时,test[0]"Hello"。不是Array您想要的标准。你不能设置[0]一个字符串。


当您要求尝试设置[0]String like"Hello"时,实际上什么也没发生,因此该行test[0][0] = "world";根本没有做任何事情!

在内心深处,字符串与数组相同。数组操作甚至可以应用于字符串。浏览器暴露潜在相似性的程度并不一致。在 FF、Chrome 和 Safari 中,您将test[0][0]获得[0]. "Hello"在那些浏览器中,Hello 有点像["H","e","l","l","o"]. 所以,test[0][0]= "Hello"[0]= "H"。IE 不会那样处理字符串。这就是为什么您会看到不一致的行为。

希望这有帮助!

编辑:正如其他人已经建议的那样, usingcharAt(x)是您在尝试从字符串中提取特定位置的字符时应该使用的功能。

于 2012-08-20T20:15:51.160 回答
0

您首先将 test[0][0] 设为一个数组,然后将一个字符串放入其中。也是,因为它test[0]是字符串的第 0 个元素。所以你得到+hellotest[0][0]hhellohelloh

于 2012-08-20T20:16:29.260 回答
0

你有一个数组

var test = new Array();

如果要在其中插入项目,请使用push

test[0] = new Array(); // not this way
test.push(new Array()); // this way

因为您希望数组更新其长度属性等。

所以,你这样做:

test[0] = new Array();
test[0] = "hello";

您将同一件事分配两次,因此很自然,只有第二次分配成立。所以我们有

test[0] == "hello"

然后,在 FireFox 中,您可以使用[]访问字符串的任何字符

test[0][0] == "hello"[0] == "h"

显然,在 IE 中你不能这样做,所以你得到undefined.

于 2012-08-20T20:17:18.000 回答