2019
TL; DR
eval
ผู้ประกอบการสามารถเรียกใช้การแสดงออกของสตริงในบริบทที่เรียกว่าและกลับตัวแปรจากบริบทนั้น
literal object
ในทางทฤษฎีสามารถทำได้โดยการเขียน: {[varName]}
แต่มันถูกบล็อกโดยคำจำกัดความ
ดังนั้นฉันจึงเจอคำถามนี้และทุกคนที่นี่ก็แค่เล่นโดยไม่ต้องใช้ทางออกที่แท้จริง แต่ @Axel Heider มีวิธีการที่ดี
eval
การแก้ปัญหาคือ ผู้ประกอบการที่ถูกลืมมากที่สุด (คิดว่าส่วนใหญ่เป็นwith()
)
eval
ผู้ประกอบการสามารถเรียกใช้การแสดงออกแบบไดนามิกในบริบทที่เรียกว่า และส่งคืนผลลัพธ์ของนิพจน์นั้น เราสามารถใช้มันเพื่อคืนค่าตัวแปรในบริบทของฟังก์ชัน
ตัวอย่าง:
function exmaple1(){
var a = 1, b = 2, default = 3;
var name = 'a';
return eval(name)
}
example1() // return 1
function example2(option){
var a = 1, b = 2, defaultValue = 3;
switch(option){
case 'a': name = 'a'; break;
case 'b': name = 'b'; break;
default: name = 'defaultValue';
}
return eval (name);
}
example2('a') // return 1
example2('b') // return 2
example2() // return 3
โปรดทราบว่าฉันมักจะเขียนอย่างชัดเจนการแสดงออกeval
จะทำงาน เพื่อหลีกเลี่ยงความประหลาดใจที่ไม่จำเป็นในรหัส eval
แข็งแรงมาก
แต่ฉันแน่ใจว่าคุณรู้แล้ว
BTW ถ้ามันถูกกฎหมายเราสามารถใช้literal object
เพื่อจับชื่อตัวแปรและค่า แต่เราไม่สามารถรวมชื่อคุณสมบัติที่คำนวณและค่าย่อของคุณสมบัติที่น่าเศร้าไม่ถูกต้อง
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`