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]値は 1 つしか持てません。あなたはそれに2つの値を与えようとしています。また、一部のブラウザーのみが配列構文を使用して文字列内の特定の文字を取得できることもわかっています。

まず、次のようにします。

test[0] = new Array();

次に、これを行います。

test[0] = "hello";

2番目のものは最初のものを置き換えて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)doc については 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

3 行目 ( test[0] = new Array();) ではtest[0]、新しい配列に設定します。

次の行 ( test[0] = "hello";) では、文字列に設定します。

次に、test[0][0] = "world";その文字列の最初のインデックスを「世界」に設定しようとします。
それはしようとしているようなものです"hello"[0] = "world";。そんなことはできません。JavaScript の String オブジェクトは不変です。


var test = Array();1次元構造を作成します...次のように:

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

次に、最初のスポットを新しい配列に設定すると、2 番目の次元が与えられます (ただし、最初のスポットのみ)。

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

次に、最初のスポットを に設定する"Hello"と、そこに配置した配列が削除されます。

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

この時点で、test[0]です"Hello"Arrayあなたが望む基準ではありません。文字列を設定することはできません[0]


[0]のような文字列の設定を試みようとすると"Hello"、実際には何も起こらないため、行test[0][0] = "world";は実際には何もしていません!.

深く言えば、文字列は配列と同じです。配列操作は文字列にも適用できます。ブラウザが根底にある類似点を明らかにする範囲は、実際には一貫していません。FF、Chrome、および Safaritest[0][0]では[0]"Hello". これらのブラウザでは、Hello は["H","e","l","l","o"]. したがって、test[0][0]= "Hello"[0]= "H". IE は文字列をそのようには扱いません。そのため、一貫性のない動作が見られます。

これが役に立ったことを願っています!

編集: 他の誰かがすでに示唆しているようにcharAt(x)、文字列から特定の位置にある文字を取得しようとするときに使用する関数は using です。

于 2012-08-20T20:15:51.160 に答える
0

最初に test[0][0] を配列にしてから、文字列を入れます。も同様test[0]hello、文字列の 0 番目の要素であるためです。だからあなたは+を得るtest[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";

同じことを 2 回割り当てているため、当然、2 番目の割り当てのみが保持されます。だから私たちは持っています

test[0] == "hello"

次に、FireFox では[]、文字列の任意の文字にアクセスするために使用できます。

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

どうやら、IEではそれができないので、undefined.

于 2012-08-20T20:17:18.000 に答える