我有以下變化:如何從兩個字符串中拼接參數名稱?
var MyVar = "8";
我有兩個字符串,例如:
var foo = "My";
var bar = "Var";
現在我想提醒MyVar的值,意爲提醒 「8」,而不是 「MyVar的」
alert(foo + bar) // returns "MyVar"
我有以下變化:如何從兩個字符串中拼接參數名稱?
var MyVar = "8";
我有兩個字符串,例如:
var foo = "My";
var bar = "Var";
現在我想提醒MyVar的值,意爲提醒 「8」,而不是 「MyVar的」
alert(foo + bar) // returns "MyVar"
不改變的背景下很多的你正在做的,你可以使用eval
功能是什麼。但是,你必須非常小心。
var MyVar = 8;
var foo = "My";
var bar = "Var";
alert(eval(foo + bar));
取決於你在做什麼,雖然有很多方法可以做到這一點。如果您將MyVar
分配爲某些上下文的一部分,如this
或window
,則只需使用該鍵作爲變量名稱即可查找該值。
窗口上下文
(function() {
window.MyVar = 8;
var foo = "My";
var bar = "Var";
alert(window[foo+bar]);
})();
功能背景
new (function() {
this.MyVar = 8;
var foo = "My";
var bar = "Var";
alert(this[foo+bar]);
})();
對象上下文
(function() {
var obj = {}
obj.MyVar = 8;
var foo = "My";
var bar = "Var";
alert(obj[foo+bar]);
})();
你的函數上下文實際上是全局的。 – bfavaretto 2013-03-18 16:09:20
你是對的,關心詳細說明,因爲我不知道爲什麼。匿名函數採用全局上下文嗎? – travis 2013-03-18 16:19:27
在函數內部,除非(a)函數被調用爲對象方法(然後'this將是對象),否則'this'將成爲全局對象,或者(b)函數被調用爲構造函數, 'new'操作符(在這種情況下'this'將指向正在構造的新對象)。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/這個 – bfavaretto 2013-03-18 16:37:37
這是一個罕見的情況下eval
將需要:
代碼
var MyVar = "8",
foo = "My",
bar = "Var";
alert(eval(foo + bar))
爲什麼downvote? – howderek 2013-03-18 15:58:48
這是爲什麼downvoted?這是此頁面上唯一正確答案(匹配OP的問題) – 2013-03-18 15:58:56
+1。我明顯誤解了這個問題,而你卻沒有。 :) – 2013-03-18 15:59:55
'警報(EVAL(FOO +巴))'。但要小心,這種方法是危險的。例如,假設任一變量不包含變量標識符的一部分,但是包含惡意代碼。 – 2013-03-18 15:57:38
只有當頁面是動態服務器端時,'eval'纔是危險的,用戶有一種與內容交互的方式(論壇,評論等),因爲XSS是一個問題。無論「eval」是否存在,用戶總是可以在網站上運行他們希望的任何代碼。唯一一次'eval'會很危險的是,當用戶的內容被放入一個函數中調用函數內的'eval'時,其他用戶會在加載黑客發佈信息或發表評論時運行惡意腳本。 – howderek 2013-03-18 16:12:30