我有一個全局變量,它是這樣的:的Javascript:動態命名的全局變量
var socket_x = 'whatever';
的事情是,「X」將取決於用戶會話。比方說,用戶ID是123,我想全局變量是:
var socket_123 = 'whatever';
這樣,每個用戶的瀏覽都會有他自己的插槽設置爲全局變量。
我只是不知道如何做到這一點。
我知道我可以使用:
eval('socket_' + userId) = 'whatever'; //not recommended
window['socket_' + userId] = 'whatever'; //best
,但如果我想聲明像這樣的全局變量,它不會工作:
var eval('socket_' + userId) = 'whatever';
有人可以幫助我在這一個?
謝謝。
PS:我不知道應該用於這種「EVAL」,但它只是爲了說明的緣故。
編輯:
謝謝您的回答,在座的各位,但它只是不工作。
這是我到目前爲止有我的全局變量(它的工作原理,因爲它是,但我不想混用JavaScript PHP):
var socket_<?php echo $_SESSION['user_id'];?> = io.connect('http://pubsub.pubnub.com', pubnub_setup_private);
如果我這樣做,而不是像你建議:
window['socket_'+actual_user_id]= io.connect('http://pubsub.pubnub.com', pubnub_setup_private);
它只是不會工作。
如果我這樣做是一個局部變量,它的工作原理:
eval('socket_'+actual_user_id).emit('all', msg_all);
但如果我這樣做,它不會:
window['socket_'+actual_user_id].emit('all', msg_all);
所以我得到了2個問題在這裏:
- 窗口從來沒有對我的作品,EVAL做。
- EVAL作品作爲一個局部變量而不是作爲一個全球性。似乎需要「var」,但在eval未被接受之前使用「var」。
我確定以避免EVAL,但我就是不知道怎麼辦。
PS:我在這裏全球範圍內。
在瀏覽器中運行該代碼?你可以在''eval''中加入'var' *不是我推薦的*。 '的eval(「變種socket_」 +用戶id +「=‘無所謂’」);' –
爲什麼要使用在你的編輯,你第二個代碼塊中的''==比較?你的意思是使用任務嗎? – apsillers
另外,它聽起來像你應該使用一個對象。 'VAR插座= {};'然後每個用戶的插座補充說:'插座[「socket_」 +用戶id =「無所謂」;' –