2013-03-17 52 views
0

我想在jQuery中創建動態變量。我嘗試使用eval(),它似乎工作正常,但我不認爲eval()是一個jQuery函數。 jQuery中是否有平衡點eval()?看到我的代碼在這裏:http://jsfiddle.net/3CXgy/在jQuery中是否有等價的eval()?

var test = function(pos) { 
    alert(eval('COUNT_'+pos)); 
} 

var COUNT_LEFT = 20; 
var COUNT_RIGHT = 30; 
test('LEFT'); 
test('RIGHT'); 

是否有不同的方式比使用eval()做到這一點其他的?我不確定在我上面的示例中eval()是否完美無缺。

+7

'eval()'是一個Javascript內置函數。 jQuery是一個Javascript庫,所以它可以使用該函數。它還提供[$ .globalEval()](http://api.jquery.com/jQuery.globalEval/),其行爲有點不同。 – 2013-03-17 08:58:32

+1

看看這個: - http://stackoverflow.com/questions/592392/whats-the-equivalent-but-more-idiomatic-to-eval-in-jquery – 2013-03-17 08:59:06

+2

請發佈您的代碼*在這裏*,與一個可選的鏈接到其他地方的現場演示。 – deceze 2013-03-17 09:01:21

回答

7

有很少任何理由使用eval

這裏是你的代碼假設瓦爾的頭部被定義

var test = function(pos) { 
    alert(window['COUNT_'+pos]); 
} 

var COUNT_LEFT = 20; 
var COUNT_RIGHT = 30; 
test('LEFT'); 
test('RIGHT'); 

不污染全局命名空間,使用

var COUNT = {"left":20, "right":30 } 
var pos = "left"; 
alert(COUNT[pos]); 
1

要通過它的名稱訪問一個全局變量,使用這個符號:

window['COUNT_'+pos] 

通常你會希望有一個對象保存您的變量:

var obj = { 
    COUNT_LEFT:20, 
    COUNT_RIGHT:30 
} 

,然後你可以訪問「變量」爲obj['COUNT_'+pos]

你的問題,因爲它寫的讓我們覺得你真的不知道什麼是jQuery。 jQuery是一個庫,它提供了從JavaScript代碼中使用的有用函數。您無法使用jQuery進行編程:您使用JavaScript函數在JavaScript中進行編程,其中一些函數被用於jQuery庫中。

+0

幾乎相同的想法,雖然我更喜歡直接訪問「基地」+變種 – mplungjan 2013-03-17 09:02:50

2

我個人更喜歡將它存儲在一個對象中,我們可以隨時輕鬆訪問,添加,修改和刪除對象。

var count = { 
    'left' : 20, 
    'right' : 30 
} 

var test = function(pos){ 
    alert(count[pos]); 
} 

test('left'); 
test('right'); 

如果你覺得有必要使用大寫,只是確保你使用一個有凝聚力的模式,因此開關所有的功能爲小寫。

var test = function(pos){ 
    alert(count[pos.toLowerCase()]); 
} 
相關問題