คำก่อนหน้านี้
ผู้ให้บริการส่วนใหญ่ใน JavaScript จะแสดงด้วยเครื่องหมายวรรคตอนและมีบางส่วนที่แสดงด้วยคำหลัก ไวยากรณ์ของพวกเขากระชับ แต่จำนวนของพวกเขาค่อนข้างใหญ่ ผู้ประกอบการมักจะปฏิบัติตามไวยากรณ์คงที่ โดยการทำความเข้าใจและการควบคุมเนื้อหาเหล่านี้เท่านั้นที่สามารถใช้งานได้อย่างถูกต้อง บทความนี้ส่วนใหญ่จะแนะนำภาพรวมไวยากรณ์ของผู้ให้บริการ JavaScript
จำนวนตัวถูกดำเนินการ
มีผู้ให้บริการ 46 รายใน JavaScript หากคุณจำแนกพวกเขาตามจำนวนตัวถูกดำเนินการส่วนใหญ่เป็นตัวดำเนินการไบนารี ตัวถูกดำเนินการของพวกเขาเป็นสองและพวกเขารวมการแสดงออกทั้งสองเข้ากับการแสดงออกที่ซับซ้อน
1 + 2; จริง || เท็จ;
ตัวดำเนินการ Unary ใน JavaScript แปลงหนึ่งนิพจน์เป็นนิพจน์ที่ซับซ้อนเล็กน้อยส่วนใหญ่รวมถึง 9: ต่อไปนี้
- ลบ typeof voida ++; typeof true;
JavaScript มีผู้ให้บริการเพียงหนึ่งเดียวเท่านั้นซึ่งเป็นตัวดำเนินการตัดสินแบบมีเงื่อนไขหรือไม่:, ซึ่งรวมสามนิพจน์เข้าไว้ในนิพจน์เดียว
2> 1? 2: 1;
ลำดับความสำคัญ
ลำดับความสำคัญของผู้ประกอบการควบคุมลำดับของการดำเนินการของผู้ประกอบการและการดำเนินการของผู้ประกอบการที่มีลำดับความสำคัญสูงมักจะนำหน้าผู้ประกอบการที่มีตัวดำเนินการที่มีลำดับความสำคัญต่ำ
ผู้ประกอบการ 46 คนแบ่งออกเป็น 14 ระดับของลำดับความสำคัญจากสูงถึงต่ำ:
- ลบ typeof โมฆะ * / % + - << >> >>> <<= >> = อินสแตนซ์ใน ==! = ===! == & ^ | && ||
จากระดับลำดับความสำคัญของโอเปอเรเตอร์ 14 ระดับเหล่านี้เราจะเห็น:
ตัวดำเนินการ Unary> ผู้ดำเนินการทางคณิตศาสตร์> ตัวดำเนินการเปรียบเทียบ> ตัวดำเนินการโลจิคัล> ตัวดำเนินการไตรภาคี> ผู้ดำเนินการที่ได้รับมอบหมาย> ตัวดำเนินการ Comma
[หมายเหตุ] ตัวดำเนินการผกผันแบบลอจิคัลเป็นของตัวดำเนินการ Unary และมีลำดับความสำคัญสูงสุด
ตัวอย่าง
! 2 <1 && 4*3+1;
สถานการณ์ข้างต้นมีความซับซ้อนมากขึ้นค่อยๆสลายคำสั่งการดำเนินการ
ก่อนคำนวณตัวดำเนินการ unary!,! 2; // false
// จากนั้นนิพจน์จะกลายเป็นเท็จ <1 && 4*3 + 1;
คำนวณตัวดำเนินการเลขคณิต 4*3+1; // 13
// จากนั้นนิพจน์จะกลายเป็นเท็จ <1 && 13;
คำนวณตัวดำเนินการเปรียบเทียบ <, false <1; // true
// จากนั้นนิพจน์จะกลายเป็น: true && 13; // 13
วงเล็บสามารถใช้เพื่อระบุลำดับการดำเนินการอย่างแข็งขัน
2+3*5; // 17 (2+3)*5; // 25;
การผูกมัด
ผู้ประกอบการมีคุณสมบัติที่มีผลผูกพันสองชนิดหนึ่งถูกผูกไว้จากซ้ายไปขวาด้วยเครื่องหมาย L และอื่น ๆ ถูกผูกไว้จากขวาไปซ้ายโดยมีเครื่องหมายอาร์การเชื่อมโยงระบุลำดับการดำเนินการในการแสดงออกของผู้ประกอบการหลายรายการที่มีลำดับความสำคัญเดียวกัน
ผู้ประกอบการส่วนใหญ่มีการรวมกันจากซ้ายไปขวามีเพียงผู้ให้บริการที่ไม่ได้รับการรับรองผู้ประกอบการแบบมีเงื่อนไขและผู้ประกอบการที่ได้รับมอบหมายมีการรวมกันจากขวาไปซ้าย
w = x + y + z; // เทียบเท่ากับ: w = ((x + y) + z);
w = x = y = z; // เทียบเท่ากับ: w = (x = (y = z));
Q = A? B: C? D: E? f: g; // เทียบเท่ากับ: q = a? B: (C? d: (e? f: g));
ลำดับความสำคัญและการผูกมัดของผู้ประกอบการกำหนดลำดับของการดำเนินการในนิพจน์ที่ซับซ้อน แต่เมื่อการแสดงออกของ subexpressions มีอิทธิพลร่วมกันคำสั่งจะเปลี่ยนไป
ตัวอย่าง
a = 1; b = a +++a-- * a ++;
ก่อนการวิเคราะห์นิพจน์ก่อนและตามลำดับความสำคัญตัวดำเนินการที่เพิ่มขึ้นผู้ดำเนินการคูณผู้ดำเนินการเพิ่มเติมและตัวดำเนินการที่ได้รับมอบหมายจะถูกคำนวณตามลำดับ
ครั้งแรกคำนวณ A ++ ครั้งแรก // ผลลัพธ์คือ 1, A คือ 2
// นิพจน์กลายเป็น b = 1+a-- * a ++;
คำนวณ A-; // ผลลัพธ์คือ 2, A คือ 1
// นิพจน์กลายเป็น b = 1+2 * a ++;
คำนวณ A ++ ที่สอง // ผลลัพธ์คือ 1, A คือ 2
// นิพจน์กลายเป็น b = 1 + 2 * 1;
ดังนั้นในที่สุด A = 2; b = 3;
a = 1; b = a +++a-- * a ++; console.log (a, b); // 2 3
// ในทำนองเดียวกัน a = 1; b = a-- * a +++a ++; console.log (a, b); // 2,1
พิมพ์
ผู้ให้บริการบางรายสามารถดำเนินการกับประเภทข้อมูลใด ๆ แต่พวกเขายังต้องการให้ตัวถูกดำเนินการเป็นข้อมูลประเภทที่ระบุและตัวดำเนินการส่วนใหญ่ส่งคืนค่าประเภทเฉพาะ ในตารางกฎของผู้ประกอบการด้านล่างลูกศรเป็นประเภทของตัวดำเนินการของผู้ประกอบการและลูกศรเป็นประเภทของผลการดำเนินการหลังจากลูกศรเป็นประเภทของผลการดำเนินการ
【 lvalue 】
Lvalue เป็นคำศัพท์โบราณที่หมายความว่าการแสดงออกสามารถปรากฏขึ้นทางด้านซ้ายของผู้ปฏิบัติงานเท่านั้น
ในจาวาสคริปต์ตัวแปรคุณสมบัติวัตถุและองค์ประกอบอาร์เรย์ล้วนเป็น lvalues ทั้งหมด
ประเภทตัวดำเนินการของตัวดำเนินการที่เพิ่มขึ้น ++, ตัวดำเนินการลดลง- และตัวดำเนินการที่ได้รับมอบหมายคือ lvalue
var a = 3; a ++; // 33-; // รายงานข้อผิดพลาด ({}). a+= '1'; // 'undefined1''test'-= 'test'; // รายงานข้อผิดพลาดตารางกฎของผู้ประกอบการ
Operator Operation Type ++ การเพิ่มขึ้น lval-> num-- decrement lval-> num- inverse num-> num+ แปลงเป็น number num-> num ~ inverse int-> int! Logical Non-Bool-> Booldelete DELETE ATTRIBUTE LVAL-> BOOLTYPEOF ประเภทการตรวจจับใด ๆ-> strvoid return undefined any-> undef ***************************************************************************************************** num-> num ******************************************************************************************************************************************************************* Shift INT, int-> int ***************************************************************************************************************** str, obj-> bool *************************************************************************************************** any-> bool ******************************************************* และ bitwise และ int, int-> int ******************************************************************************************************* int-> int ***************************************************************************************************************************************************************************************** ตรรกะหรือใด ๆ-> ใด ๆ *************************************************** บูล, ใด ๆ , ใด ๆ-> ใด ๆ *************************************************************************************************************************************************************** - - - - - - -
ภาพรวมที่ครอบคลุมข้างต้นของไวยากรณ์ของผู้ให้บริการ JavaScript คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น