Kata kunci yang dicadangkan dalam JavaScript

Jawaban:

1476

Inilah puisi saya, yang mencakup semua kata kunci yang disediakan dalam JavaScript, dan didedikasikan untuk mereka yang tetap jujur ​​saat ini, dan tidak hanya mencoba untuk membuat skor:

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.
art4theSould
sumber
5
screenshots.firefox.com/MVw02wDrHPi197kK/stackoverflow.com itu membuat saya tidak ingin mengklik itu
Kuba Orlik
61

Untuk melengkapi jawaban benc , lihat Standar ECMA-262 . Ini adalah kata-kata resmi yang dicadangkan, tetapi hanya pedant yang mengabaikan penerapannya untuk menghormati standar. Untuk kata-kata yang dilindungi dari implementasi yang paling populer, yaitu firefox dan internet explorer, lihat jawaban benc.

Kata-kata yang dicadangkan dalam EMCAScript-262 adalah Kata Kunci s, Future Reserved Word s, NullLiteral , dan BooleanLiteral s, di mana Kata Kunci berada

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

yang Future Reserved Firman s adalah

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

yang NullLiteral adalah

null

dan BooleanLiteral adalah

true
false
Joseph Holsten
sumber
Joseph, terima kasih telah menambahkan info itu. Saya menemukan PDF itu di google, tetapi tidak punya waktu untuk membuka dan membaca semuanya.
benc
Kata "abstrak" masa depan yang dicadangkan tidak disebutkan dalam spesifikasi ES5 maupun konsep ES6. Darimana itu datang?
Vladimir Panteleev
2
Menemukannya! Itu hadir di ES3 sebagai kata masa depan yang dicadangkan, bersama dengan daftar panjang orang lain, tetapi itu dihapus dalam ES5.
Vladimir Panteleev
13
Jawaban macam apa ini. Itu bahkan tidak berima.
Gajus
1
Saya tidak bisa melihat letdi sini, tetapi saya melihatnya di dokumen: ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
prosti
20

Saya baru saja membaca tentang ini di JavaScript & jQuery: The Missing Manual :

Tidak semua kata-kata yang dicadangkan ini akan menyebabkan masalah di semua browser, tetapi yang terbaik adalah menghindari nama-nama ini saat menamai variabel.

JavaScript kata kunci: 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, with .

Dicadangkan untuk penggunaan masa depan: 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 .

Pra-didefinisikan variabel global dalam browser: alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window .

ini aku
sumber
Lokasi yang digunakan dalam skrip dan mendapat perilaku yang sangat aneh, posting yang sangat berguna.
alimack
2
"Dicadangkan untuk penggunaan di masa mendatang" :: Semua kata Java ... benar-benar malas.
Eddie B
2
Perhatikan bahwa "dilindungi undang-undang" tidak sama dengan "pra-inisialisasi". Di browser, alertsudah diinisialisasi, tetapi tidak ada yang menghentikan Anda untuk menetapkan kembali alert = 5. Namun, Anda tidak dapat mengatur windowke 5, tetapi Anda dapat menggunakannya sebagai variabel lokal. Itu tidak mungkin dengan kata kunci dicadangkan, penggunaan masa depan, null, false, true.
Ruben Verborgh
Jawaban yang lebih banyak dipilih tidak terjawab yieldoleh cek cepat saya sehingga +1 dari saya. Ini dapat di ES5.1 diaktifkan dengan mode ketat:implements interface let package private protected public static yield
5

Berikut ini adalah cara agnostik versi browser dan bahasa untuk menentukan apakah string tertentu diperlakukan sebagai kata kunci oleh mesin JavaScript. Penghargaan untuk jawaban ini yang menyediakan inti dari solusi.

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}
GOTO 0
sumber
7
Jika Anda harus menggunakan evalapa pun, kemungkinan besar itu berarti Anda salah melakukannya.
SeinopSys
8
Ini sangat cocok untuk uji kasus yang dijalankan pada waktu pembuatan, sepenuhnya valid selama itu bukan sesuatu yang telah Anda ekspos saat runtime.
Abdullah Jibaly
3

Tidak satu pun dari jawaban saat ini yang memperingatkan bahwa terlepas dari ES-Dialek, peramban cenderung memiliki daftar kata kunci yang dicadangkan sendiri, metode dll. Di atas apa yang ditentukan ES.

Misalnya, IE9 melarang penggunaan nama logis seperti: addFilter, removeFilter(mereka, antara lain, metode dilindungi).

Lihat http://www.jabcreations.com/blog/internet-explorer-9 untuk daftar yang lebih luas 'saat ini dikenal' khusus untuk IE9. Saya belum menemukan referensi resmi kepada mereka di msdn (atau di tempat lain).

GitaarLAB
sumber
1

Berikut adalah daftar dari buku 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
starhopperx
sumber
-1

jawaban benc sangat bagus, tetapi untuk dua sen saya, saya suka halaman w3schools tentang ini:

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

Selain mencantumkan kata kunci yang dicadangkan oleh standar, ia juga memiliki daftar panjang kata kunci yang harus Anda hindari dalam konteks tertentu; misalnya, tidak menggunakan nama alertsaat menulis kode untuk dijalankan di browser. Itu membantu saya mengetahui mengapa kata-kata tertentu disorot sebagai kata kunci di editor saya meskipun saya tahu itu bukan kata kunci.

Reikim
sumber