คำหลักที่สงวนไว้ใน JavaScript


คำตอบ:



1476

นี่คือบทกวีของฉันซึ่งรวมถึงคำหลักที่สงวนไว้ทั้งหมดใน JavaScript และทุ่มเทให้กับผู้ที่ยังคงซื่อสัตย์ในขณะนี้และไม่เพียง แต่พยายามทำคะแนน:

Let this long package float, 
Goto private class if short.
While protected with debugger case,  
Continue volatile interface.
Instanceof super synchronized throw, 
Extends final export throws.  

Try import double enum?  
- False, boolean, abstract function, 
Implements typeof transient break!
Void static, default do,  
Switch int native new. 
Else, delete null public var 
In return for const, true, char
…Finally catch byte.

5
screenshots.firefox.com/MVw02wDrHPi197kK/stackoverflow.com ทำให้ฉันไม่ต้องการคลิกที่
Kuba Orlik

61

เพื่อเสริมคำตอบของ Bencดูมาตรฐาน ECMA-262 คำเหล่านี้เป็นคำสงวนอย่างเป็นทางการ แต่มีเพียงคนอวดรู้ที่ละเว้นการปฏิบัติตามมาตรฐาน สำหรับคำสงวนของการใช้งานที่เป็นที่นิยมมากที่สุดนั่นคือ firefox และ internet explorer ดูคำตอบของ benc

คำที่สงวนไว้ใน EMCAScript-262 คือคำสำคัญ s, คำที่สงวนไว้ในอนาคต , NullLiteralและBooleanLiteral s โดยที่คำหลักนั้น

break     do        instanceof  typeof
case      else      new         var
catch     finally   return      void
continue  for       switch      while
debugger  function  this        with
default   if        throw
delete    in        try

สงวนไว้ในอนาคตของ Word s มี

abstract  export      interface  static
boolean   extends     long       super
byte      final       native     synchronized
char      float       package    throws
class     goto        private    transient
const     implements  protected  volatile
double    import      public 
enum      int         short

NullLiteralคือ

null

และBooleanLiteralคือ

true
false

โจเซฟขอบคุณสำหรับการเพิ่มข้อมูลนั้น ฉันพบว่า PDF ใน google แต่ไม่มีเวลาเปิดและอ่านทั้งหมด
benc

คำที่สงวนไว้ "นามธรรม" ในอนาคตไม่ได้กล่าวถึงในข้อกำหนด ES5 หรือแบบร่าง ES6 ไหนว่ามาจากไหน?
Vladimir Panteleev

2
พบมัน! มันมีอยู่ใน ES3 เป็นคำที่สงวนไว้ในอนาคตพร้อมกับรายชื่ออื่น ๆ ที่ยาว แต่มันถูกลบออกใน ES5
Vladimir Panteleev

13
คำตอบแบบนี้คืออะไร มันไม่ได้คล้องจอง
Gajus

1
ฉันไม่เห็นletที่นี่ แต่ฉันเห็นใน docu: ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
prosti

20

ฉันเพิ่งอ่านเรื่องนี้ในJavaScript & jQuery: คู่มือที่หายไป :

ไม่ใช่คำที่สงวนไว้ทั้งหมดจะทำให้เกิดปัญหาในเบราว์เซอร์ทั้งหมด แต่เป็นการดีที่สุดที่จะหลีกเลี่ยงชื่อเหล่านี้เมื่อตั้งชื่อตัวแปร

คำหลัก break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, void, while, withJavaScript:

abstract, boolean, byte, char, class, const, double, enum, export, extends, final, float, goto, implements, import, int, interface, let, long, native, package, private, protected, public, short, static, super, synchronized, throws, transient, volatile, yieldสงวนไว้สำหรับการใช้งานในอนาคต:

alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, windowที่กำหนดไว้ล่วงหน้าตัวแปรระดับโลกในเบราว์เซอร์:


ใช้ตำแหน่งในสคริปต์และมีพฤติกรรมที่แปลกมากโพสต์ที่มีประโยชน์มาก
alimack

2
"สงวนไว้สำหรับการใช้งานในอนาคต" :: คำ Java ทั้งหมด ... ค่อนข้างขี้เกียจจริงๆ
Eddie B

2
โปรดทราบว่า "สงวนไว้" ไม่เหมือนกับ "เตรียมใช้งานล่วงหน้า" ในเบราว์เซอร์alertมีการเริ่มต้นแล้ว แต่ไม่มีอะไรทำให้คุณไม่สามารถกำหนดใหม่alert = 5ได้ อย่างไรก็ตามคุณไม่สามารถตั้งค่าwindowเป็น 5 แต่คุณสามารถใช้มันเป็นตัวแปรท้องถิ่น nullนั่นเป็นไปไม่ได้กับคำหลักที่สงวนไว้ใช้ในอนาคต false, true,
Ruben Verborgh

คำตอบที่โหวตมากขึ้นไม่ได้รับyieldจากการตรวจสอบด่วนของฉันดังนั้น +1 จากฉัน สามารถเปิดใช้งาน ES5.1 ได้ในโหมดเข้มงวด:implements interface let package private protected public static yield

5

นี่คือวิธีที่ไม่เชื่อเรื่องพระเจ้าของเบราว์เซอร์และภาษาในการตรวจสอบว่าสตริงเฉพาะจะถือว่าเป็นคำหลักโดยเครื่องมือ JavaScript ให้เครดิตกับคำตอบนี้ซึ่งเป็นแกนหลักของการแก้ปัญหา

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}

7
หากคุณต้องใช้evalเพื่ออะไรก็ตามเป็นไปได้ว่าคุณทำผิด
SeinopSys

8
นี่คือที่สมบูรณ์แบบสำหรับกรณีทดสอบที่สร้างในเวลาที่ถูกต้องสมบูรณ์ตราบใดที่มันไม่ใช่สิ่งที่คุณได้สัมผัสที่รันไทม์
Abdullah Jibaly

3

ไม่มีคำตอบปัจจุบันที่เตือนว่าไม่คำนึงถึง ES-Dialect เบราว์เซอร์มักจะมีรายการคำหลักที่สงวนไว้ของตนเองวิธีการและอื่น ๆ ที่อยู่เหนือสิ่งที่ ES สั่ง

ตัวอย่างเช่น IE9 ห้ามมิให้ใช้ชื่อโลจิคัลเช่น: addFilter, removeFilter(เป็นชื่อวิธีสำรอง)

ดูhttp://www.jabcreations.com/blog/internet-explorer-9สำหรับรายการ 'ที่เป็นที่รู้จักกันมากในปัจจุบัน' ที่เฉพาะเจาะจงสำหรับ IE9 ฉันยังพบการอ้างอิงอย่างเป็นทางการกับพวกเขาใน msdn (หรือที่อื่น ๆ )


1

นี่คือรายการจากหนังสือ Eloquent JavaScript:

  • break
  • case
  • catch
  • class
  • const
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • enum
  • export
  • extend
  • false
  • finally
  • for
  • function
  • if
  • implements
  • import
  • in
  • instanceof
  • interface
  • let
  • new
  • null
  • package
  • private
  • protected
  • public
  • return
  • static
  • super
  • switch
  • this
  • throw
  • true
  • try
  • typeof
  • var
  • void
  • while
  • with
  • yield

-1

คำตอบของ benc นั้นยอดเยี่ยม แต่สำหรับสองเซ็นต์ของฉันฉันชอบหน้า w3schools 'ในนี้:

http://www.w3schools.com/js/js_reserved.asp

นอกเหนือจากการแสดงรายการคำหลักที่สงวนไว้ตามมาตรฐานแล้วยังมีรายการคำหลักที่ยาวที่คุณควรหลีกเลี่ยงในบางบริบท ตัวอย่างเช่นไม่ใช้ชื่อalertเมื่อเขียนรหัสเพื่อให้ทำงานในเบราว์เซอร์ มันช่วยให้ฉันทราบว่าเหตุใดคำบางคำจึงถูกเน้นเป็นคำหลักในเครื่องมือแก้ไขแม้ว่าฉันจะรู้ว่าไม่ใช่คำหลักก็ตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.