Tidak seperti PHP, JavaScript tidak menawarkan akses ke larik global (yang berisi referensi ke semua nama variabel yang saat ini dideklarasikan). Karena itu, JavaScript tidak menawarkan dukungan asli untuk variabel variabel. Namun, Anda dapat meniru fitur ini selama Anda mendefinisikan semua variabel Anda sebagai bagian dari larik atau objek. Ini pada gilirannya akan membuat array gloabls untuk Anda. Misalnya, daripada mendeklarasikan variabel hello
dalam cakupan global seperti ini:
var hello = 'hello world';
mari kita merangkumnya di dalam sebuah objek. Kami akan memanggil objek itu vv (variabel variabel):
var vv = {
'hello': 'hello world',
//Other variable variables come here.
},
referToHello = 'hello';
Sekarang kita dapat merujuk ke variabel dengan indeksnya, dan karena indeks array dapat disediakan menggunakan variabel, kita secara de facto menggunakan variabel variabel:
console.log(vv[referToHello]); //Output: hello world
Jawaban atas Pertanyaan Anda
Mari terapkan ini ke kode yang Anda berikan di pertanyaan awal:
var vv = {
'x': 'variable',
'variable': 'hello world!'
};
console.log(vv[vv['x']]); //Displays "hello, world!"
Penggunaan Praktis
Meskipun kode sebelumnya mungkin tampak sangat rumit dan tidak praktis, ada penggunaan praktis untuk variabel variabel di JavaScript menggunakan jenis enkapsulasi ini. Dalam contoh di bawah ini kami menggunakan konsep yang sama untuk mendapatkan ID dari sejumlah elemen HTML yang tidak ditentukan.
var elementIds = [],
elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
elements.forEach( (element) => {
elementIds[element] = document.getElementById(element);
});
Contoh ini mendeklarasikan variabel variabel (key in elementIds
) berdasarkan ID dari setiap elemen, dan akan menetapkan node dari elemen tersebut sebagai nilai dari setiap variabel. Dan karena menggunakan variabel global dalam JavaScript umumnya tidak disarankan untuk memberikan variabel variabel Anda ruang lingkup yang unik (dalam hal ini, mendeklarasikannya di dalam elementIds
array) tidak hanya rapi, tetapi juga lebih bertanggung jawab.