ฉันอ่าน es5 ในวันนี้และพบว่าแอตทริบิวต์ [[กำหนดค่าได้]] ในคุณสมบัติบิวด์อินบางตัวของออบเจ็กต์ทั่วโลกถูกตั้งค่าเป็นจริงซึ่งหมายความว่าเราสามารถลบคุณสมบัติเหล่านี้ได้
ตัวอย่างเช่น:
วิธีการเข้าร่วมของวัตถุ Array.prototype มีคุณสมบัติ
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
ดังนั้นเราสามารถลบวิธีการเข้าร่วมสำหรับ Array ได้อย่างง่ายดายเช่น:
delete Array.prototype.join;
alert([1,2,3].join);
การแจ้งเตือนจะแสดงundefined
ในโครเมียม 17 ของฉัน firefox 9 คือ 10 แม้แต่ ie6;
ใน Chrome 15 & ซาฟารี 5.1.1 แอตทริบิวต์ [[กำหนดค่าได้]] ถูกตั้งค่าเป็นจริงและผลลัพธ์การลบก็เป็นจริงเช่นกัน แต่ผลลัพธ์สุดท้ายยังคงfunction(){[native code]}
อยู่ ดูเหมือนว่านี่เป็นข้อผิดพลาดและโครเมียมแก้ไขได้
ฉันไม่ได้สังเกตสิ่งนั้นมาก่อน ในความคิดของฉันลบฟังก์ชั่นในตัวในรหัสผู้ใช้เป็นอันตรายและจะทำให้เกิดข้อบกพร่องมากมายเมื่อทำงานกับผู้อื่นดังนั้นทำไม ECMAScript ตัดสินใจเรื่องนี้?