2017-02-04 19 views

答えて

1

"b"+1"b1"に文字列にフォーマットされているため、コンソールで1が表示されます。この文字列のインデックス1は、文字1です。

あなたがしたいことをすることは非常に悪い考えです。他の呼び出しからの数値を使用してこれらの変数にアクセスする場合は、配列b = []を使用し、文字列にb [index] [subindex] `を使用します。

windowスコープ変数を使用してください。

+0

**しないでください* *配列を使用する。 *名前付きプロパティを使用する場合は、プレーンなオブジェクトを使用します。 – Quentin

2

b1がグローバルスコープで定義されている場合は、ウィンドウオブジェクトのメンバーとしてそれにアクセスすることができます:あなたはその結果を得るのはなぜ

// When variable is defined in global scope 
 
var b1 = ["B", "V"]; 
 
console.log(window['b'+1][1]); 
 

 
// Inside a function you're stuck with eval. 
 
// You should be really, really careful with eval. 
 
// Most likely you can change your design so you wont need it. 
 
function test() { 
 
    var b2 = ["B", "V"]; 
 
    console.log(eval(('b'+1))[1]); 
 
} 
 

 
test(); 
 

 
// Just to demonstrate that accessing an object's properties 
 
// always works the same way 
 
window['console']['log']('hi');

+0

機能の中にあります。私はwindow.nameOfFunctionを試しましたが、うまくいきません。また、あなたがしたことを説明することができますか?どうやって[b] + 1に[]を使ったのですか? – stepbystep

+0

@stepbystep私は自分の答えを更新しました。基本的には、名前を角かっこで囲んでオブジェクトの任意のプロパティにアクセスできます。プロパティ名は常に文字列なので、 'window ['1']'と 'window [1]'は同じプロパティを参照します。 – Schlaus

0

とき文字列と数字を連結して(+)、文字列を取得します。文字列にブラケット記法を使用すると、特定のインデックスに文字が表示されます。あなたの場合、"1"。あなたはb1変数がグローバルである場合、それは(関数内で定義されていない)

を動作させることができますどのように

、それはwindowのプロパティです。したがって、window["b"+1]を使用してアクセスできます。

var b1 = ["B", "V"]; 
 

 
console.log(window["b"+1][1]); // "V"

それは(関数の内部で)ローカルだ場合は、それを格納するためにオブジェクトを使用します。

var scope = {}; 
 
scope.b1 = ["B", "V"]; 
 

 
console.log(scope["b"+1][1]); // "V"

関連する問題