Rumah >hujung hadapan web >tutorial js >Mengapa JavaScript Tidak Membenarkan Kekunci Objek Dinamik dalam Literal Objek Secara Terus?

Mengapa JavaScript Tidak Membenarkan Kekunci Objek Dinamik dalam Literal Objek Secara Terus?

Patricia Arquette
Patricia Arquetteasal
2024-12-30 21:48:15900semak imbas

Why Doesn't JavaScript Allow Dynamic Object Keys in Object Literals Directly?

JavaScript Object Key dari Variable Conundrum

Apabila menggunakan literal objek dalam JavaScript, anda mungkin menghadapi tingkah laku yang pelik apabila menetapkan pembolehubah kepada dinamik kunci hartanah tidak berfungsi. Pertimbangkan dua coretan kod ini:

<something>.stop().animate({ 'top': 10 }, 10); // Works
var thetop = 'top';
<something>.stop().animate({ thetop: 10 }, 10); // Doesn't work

Mengapa Percanggahan?

Coretan pertama berjaya menetapkan sifat "atas" objek, menggunakan tatatanda titik. Walau bagaimanapun, coretan kedua gagal kerana JavaScript tidak membenarkan penggunaan pembolehubah untuk mentakrifkan nama sifat objek dinamik secara langsung dalam literal objek.

Penyelesaian dalam ES5 dan Terdahulu

Untuk menetapkan dinamik nama harta daripada pembolehubah dalam ES5 dan lebih awal, anda mesti membina objek literal secara manual:

var thetop = "top";
var aniArgs = {};
aniArgs[thetop] = 10; // Assign value to variable property name
<something>.stop().animate(aniArgs, 10);

Penyelesaian dalam ES6 dan Kemudian

ES6 memperkenalkan "ComputedPropertyName" dalam tatabahasa literal objek, membolehkan penetapan nama sifat dinamik daripada pembolehubah secara langsung:

var thetop = "top",
    obj = { [thetop]: 10 };
console.log(obj.top); // -> 10

Sintaks ini disokong dalam versi terkini major pelayar.

Atas ialah kandungan terperinci Mengapa JavaScript Tidak Membenarkan Kekunci Objek Dinamik dalam Literal Objek Secara Terus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn