ในเดือนธันวาคม 2552 ECMASCRIPT เปิดตัว ECMASCRIPT 5 ซึ่งได้รับการเผยแพร่สำหรับมาตรฐาน ECMASCRIPT 3 รุ่นสุดท้ายสำหรับเวอร์ชันก่อนหน้า ความซับซ้อนของภาษานี้ (นั่นคือไม่ว่าจะเพิ่มลักษณะจำนวนมากเพื่อขยายฟังก์ชั่นของ ecmascript) และเสียชีวิตทำให้การกำหนดมาตรฐาน ECMAScript ใหม่ที่ล่าช้าอย่างมากหลังการเขียนโปรแกรม Ecmascript 5 ไม่ทะเยอทะยานในแง่ของเป้าหมาย ในโหมดนี้ไวยากรณ์ของ ECMASCript มีความเข้มงวดมากขึ้นทำให้ไม่อนุญาตให้ใช้รหัสง่าย ๆ -ไม่อนุญาตให้ใช้รหัสที่ง่ายต่อการประกาศตัวแปรที่บังคับและไม่มีคำสั่ง โหมดนี้ง่ายมาก
ฉันได้เรียนรู้ในภายหลังว่าในปี 2010 ฉันยังเขียนบทความสั้น ๆ เพื่อหารือเกี่ยวกับข้อบกพร่องของคำหลักด้วยสิ่งต่อไปนี้
ลิ่ม
นานมาแล้วบ้านเกิดของบ้านเกิดของ God Ma Liang ได้รับการตั้งชื่อตามชื่อของเขา Ma Liang ไม่ได้ลาออก แต่ทำสี่คำ หลายปีต่อมาชาวต่างชาติมาที่นี่และหยุดคนท้องถิ่นบนถนนสายนี้
นี่คือถนน Shenma หรือไม่?
ใช่นี่คือถนน Shenma
คุณไม่รู้เหมือนกัน?
ฉันเป็นคนนี้ฉันจะไม่รู้ได้อย่างไร
นี่คือถนน Shenma หรือไม่?
คุณรู้ว่าคุณถามอะไร
ฉันไม่รู้ว่านี่คือถนน Shenma
ฉันไม่ได้บอกคุณว่านี่คือถนน Shenma?
คุณพูดได้อีกครั้ง?
นูปิโน
หลังจากนั้นชาวบ้านก็จำความคิดเห็นของ Ma Liang ในปีนั้นและก็ตระหนักได้ทันที สิ่งที่แม่เหลียงกำลังพูดถึง -อย่าใช้ตัวย่อ
คำถาม
วันหนึ่งทัวร์ไปที่วังเอ่อเพื่อนชาวจีนของเขา "ฉันมีความฝันฉันต้องการแสดงตัวเองในกล้องวงจรปิด" ในวันถัดไปทอมบุกเข้าไปในเพื่อนบ้าน กล้องวงจรปิดของร้านค้า
คำถามคือเมื่อทอมพูดถึงความฝันของเขาเขาคือ
a) ทะเยอทะยาน b) ไม่ทะเยอทะยาน c) ไม่ชัดเจน d)
angr ที่ถูกต้องคือ b) และ c)
ข้อความ
สองตัวอย่างข้างต้นของจีนโบราณและสมัยใหม่และต่างประเทศอธิบายว่าการสะท้อนบางครั้งทำให้เกิดความคลุมเครือ สิ่งนี้ยังมีอยู่ใน JavaScript บางครั้งมันก็ลำบากมากที่จะสร้างตัวแปรที่ยาวนานเช่น ::
ObjectWithLongName1.Propty1 = ค่า 1;
ObjectWithLongName1.Propty2 = value2;
ObjectWithLongName1.Propty3 = ค่า 3;
ObjectWithLongName1.Method1 ();
แต่ชื่อที่ชัดเจนนั้นสำคัญมากสำหรับการอ่านของโปรแกรม ดังนั้น JavaScript จึงมีคำสั่ง ตัวอย่างข้างต้นสามารถเขียนใหม่:
คัดลอกรหัสรหัสดังนี้:
ด้วย (ObjectWithLongName1) {{
proty1 = ค่า 1;
propy2 = value2;
propy3 = ค่า 3;
วิธีการ 1 ();
-
สิ่งนี้จะช่วยประหยัดกังฟูจำนวนมากบนคีย์บอร์ดและโครงสร้างของโปรแกรมจะชัดเจนขึ้น แต่ตัวย่อนี้แนะนำความคลุมเครือ กฎการวิเคราะห์ของ JavaScript คือการค้นหาคุณลักษณะของชื่อเหล่านี้ใน ObjectWithLongName1 ก่อน นี่คือสิ่งที่อธิบายด้วยรหัส:
คัดลอกรหัสรหัสดังนี้:
if (ObjectWithLongName1.Property1! == ไม่ได้กำหนด) {
if (ObjectWithLongName1.Value1! == ไม่ได้กำหนด) {
ObjectWithLongName1.Property1 = ObjectWithLongName1.Value1;
} อื่น {
ObjectWithLongName1.Property1 = ค่า 1;
-
} อื่น {
if (ObjectWithLongName1.Value1! == ไม่ได้กำหนด) {
Property1 = ObjectWithLongName1.Value1;
} อื่น {
ทรัพย์สิน 1 = ค่า 1;
-
-
สิ่งที่เราต้องการคือหนึ่งในสี่ความเป็นไปได้เหล่านี้ แต่ถ้าคุณไม่ระวังโปรแกรมจะดำเนินการอีกครั้ง ยิ่งกว่านั้นวิธีการเขียนนี้ยังยากมากที่จะแก้ปัญหาผู้อ่านของโปรแกรม ในทางกลับกันความไม่แน่นอนนี้ยังส่งผลต่อประสิทธิภาพของภาษาสำหรับล่าม JavaScript
ในความเป็นจริงตราบใดที่การปรับปรุงเล็กน้อยสามารถลบออกได้ข้อบกพร่องเหล่านี้สามารถลบออกได้ เราสามารถเพิ่มหมายเลขจุดก่อนที่แอตทริบิวต์ของวัตถุเพื่อให้มีความแตกต่างอย่างชาญฉลาดระหว่างแอตทริบิวต์และตัวแปรภายนอกและมีภาษาอื่น ๆ อีกมากมายที่ทำสิ่งนี้ ตัวอย่างเริ่มต้นของเราจะกลายเป็นเช่นนี้:
คัดลอกรหัสรหัสดังนี้:
ด้วย (ObjectWithLongName1) {{
.propty1 = ค่า 1;
.propty2 = ค่า 2;
.propty3 = ค่า 3;
.Method1 ();
-
ก่อนที่จาวาสคริปต์จะทำการปรับปรุงเช่นนี้พลังที่เป็นอันตรายทั้งสองนั้นเบาและเราต้องพยายามหลีกเลี่ยงการใช้คำสั่งด้วยมากที่สุด เรายังสามารถใช้วิธีการเปลี่ยนแปลงได้บ้าง
คัดลอกรหัสรหัสดังนี้:
var O1 = ObjectWithLongName1;
o1.prpty1 = ค่า 1;
o1.prpty2 = ค่า 2;
O1.PRPTY3 = ค่า 3;
o1.method1 ();
หรือสำหรับสถานการณ์นี้:
ObjectWithLongName1.Propty1 = ObjectWithLongName2.Propty1;
ObjectWithLongName1.Propty2 = ObjectWithLongName2.Propty2;
นูปิโน
ObjectWithLongName1.Propty10 = ObjectWithLongName2.Propty10;
สามารถเขียนเป็น:
คัดลอกรหัสรหัสดังนี้:
(ฟังก์ชั่น (O1, O2, PL) {
PL.Foreach (ฟังก์ชั่น (มัน) {o1 [item] = o2 [item];});
}) (ObjectWithLongName1, ObjectWithLongName2, ['proty1', 'proty2', ... , 'proty10'));