2013-03-18 69 views
0

我有以下變化:如何從兩個字符串中拼接參數名稱?

var MyVar = "8"; 

我有兩個字符串,例如:

var foo = "My"; 
var bar = "Var"; 

現在我想提醒MyVar的值,意爲提醒 「8」,而不是 「MyVar的」

alert(foo + bar) // returns "MyVar" 
+2

'警報(EVAL(FOO +巴))'。但要小心,這種方法是危險的。例如,假設任一變量不包含變量標識符的一部分,但是包含惡意代碼。 – 2013-03-18 15:57:38

+0

只有當頁面是動態服務器端時,'eval'纔是危險的,用戶有一種與內容交互的方式(論壇,評論等),因爲XSS是一個問題。無論「eval」是否存在,用戶總是可以在網站上運行他們希望的任何代碼。唯一一次'eval'會很危險的是,當用戶的內容被放入一個函數中調用函數內的'eval'時,其他用戶會在加載黑客發佈信息或發表評論時運行惡意腳本。 – howderek 2013-03-18 16:12:30

回答

1

不改變的背景下很多的你正在做的,你可以使用eval功能是什麼。但是,你必須非常小心。

var MyVar = 8; 

var foo = "My"; 
var bar = "Var"; 

alert(eval(foo + bar)); 

取決於你在做什麼,雖然有很多方法可以做到這一點。如果您將MyVar分配爲某些上下文的一部分,如thiswindow,則只需使用該鍵作爲變量名稱即可查找該值。

窗口上下文

(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]); 
})(); 
+1

你的函數上下文實際上是全局的。 – bfavaretto 2013-03-18 16:09:20

+1

你是對的,關心詳細說明,因爲我不知道爲什麼。匿名函數採用全局上下文嗎? – travis 2013-03-18 16:19:27

+2

在函數內部,除非(a)函數被調用爲對象方法(然後'this將是對象),否則'this'將成爲全局對象,或者(b)函數被調用爲構造函數, 'new'操作符(在這種情況下'this'將指向正在構造的新對象)。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/這個 – bfavaretto 2013-03-18 16:37:37

5

這是一個罕見的情況下eval將需要:

代碼

var MyVar = "8", 
    foo = "My", 
    bar = "Var"; 
alert(eval(foo + bar)) 

鏈接:http://jsfiddle.net/howderek/wcVNU/

+0

爲什麼downvote? – howderek 2013-03-18 15:58:48

+1

這是爲什麼downvoted?這是此頁面上唯一正確答案(匹配OP的問題) – 2013-03-18 15:58:56

+0

+1。我明顯誤解了這個問題,而你卻沒有。 :) – 2013-03-18 15:59:55

4

假設這是一個全局變量:

alert(window[foo + bar]) 

但你可能會更好過使用該對象和屬性。對象屬性也可以用括號記號訪問:

var obj = { 
    MyProp : 8 
}; 
var foo = "My"; 
var bar = "Prop"; 
alert(obj[foo + bar]); 
+2

現在,如果它不是全局變量呢? – 2013-03-18 15:59:22

+1

如果它是全球性和非全球性的混合體? – howderek 2013-03-18 16:01:50

+1

嗯,爲什麼我在嘗試這個時弄不明白? – j08691 2013-03-18 16:02:04

相關問題