私が持っている場合:文字列をconcatinatingするときの配列要素の参照方法は?
var b1 = ["B", "V"];
私はb1[1]
で"V"
にアクセスすることができます。
なぜ以下では動作しません:
console.log(("b"+1)[1]);
私はコンソールに1を取得します。
私が持っている場合:文字列をconcatinatingするときの配列要素の参照方法は?
var b1 = ["B", "V"];
私はb1[1]
で"V"
にアクセスすることができます。
なぜ以下では動作しません:
console.log(("b"+1)[1]);
私はコンソールに1を取得します。
"b"+1
が"b1"
に文字列にフォーマットされているため、コンソールで1が表示されます。この文字列のインデックス1は、文字1
です。
あなたがしたいことをすることは非常に悪い考えです。他の呼び出しからの数値を使用してこれらの変数にアクセスする場合は、配列b = []
を使用し、文字列にb [index] [subindex] `を使用します。
window
スコープ変数を使用してください。
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');
機能の中にあります。私はwindow.nameOfFunctionを試しましたが、うまくいきません。また、あなたがしたことを説明することができますか?どうやって[b] + 1に[]を使ったのですか? – stepbystep
@stepbystep私は自分の答えを更新しました。基本的には、名前を角かっこで囲んでオブジェクトの任意のプロパティにアクセスできます。プロパティ名は常に文字列なので、 'window ['1']'と 'window [1]'は同じプロパティを参照します。 – Schlaus
とき文字列と数字を連結して(+
)、文字列を取得します。文字列にブラケット記法を使用すると、特定のインデックスに文字が表示されます。あなたの場合、"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"
**しないでください* *配列を使用する。 *名前付きプロパティを使用する場合は、プレーンなオブジェクトを使用します。 – Quentin