除了正經( 震精 (○´・д・)ノ )的描述保留字,還會說一些側面知識。瀏覽器
先是籠統的說一下有什麼保留字,保留字的話根據犀牛書的劃分,可有分爲如下幾類:ide
① :基礎保留字: 這類保留字是最經常使用也是最經常使用到的,如:for、belete、void 等。函數
② :嚴格模式下的保留字:這類保留字會在你使用嚴格模式下列爲保留字,如:let 、protected 等。oop
③ :嚴格模式下的不徹底保留字: 如:arguments、eval ;this
④ :ECMAScript3的保留字:若是你但願你的代碼運行在基於ECMAScript 3 的解析器上,那麼你應該瞭解一下。spa
⑤ :ECMAScipt 5 的保留字:class、const 等debug
⑥ :全局變量和函數: 這類放在保留字,主要是爲了不污染,應該避免以他們的名字定義變量名和函數名,如: Function、encodeURL 等。code
所有的基礎保留字:對象
1 var n; 2 switch (n) { 3 case 2: // ==> if ( n === 2 ) 4 console.log(1) 5 break; 6 case '2': 7 console.log(2) 8 break; 9 default: 10 console.log('n與上面case的值都不相等時執行 default 內的代碼塊') 11 }
簡單的說,你只要把 switch (n) 內的值 n 和 case m 後的值 m 當成是 if () 內執行 n===m 就容易理解了,因此:blog
var n = '2'; switch (n) { case 2: console.log(1) break; case '2': console.log(2) break; default: // 傳說中的替補隊員,存在break的狀況下,只有前面都不爲真時會觸發。 console.log('n與上面case的值都不相等時執行 default 內的代碼塊') } // 上面的代碼輸出的會是-> 2 ;
值得提醒一下新人的是,若是不添加 break 語句的話,switch 會繼續執行至整個循環結束。例如:
var n = '2'; switch (n) { case 2: // ==> if ( n === 2 ) console.log(1) case '2': console.log(2) default: console.log('我被執行了') } // 輸出-> 2 // 以及輸出-> 我被執行了
// 日常咱們寫 for 循環 for (var i=0; i<5; i++) { console.log(i) } // 依次輸出 0 1 2 3 4 // 也能夠寫成這樣 var i=0,len=5; for (; i<len ;) { console.log(i) i++ } // 輸出結果是同樣的 0 1 2 3 4 // for in 循環 var data={a=1},x; for (x in data) { console.log( x ) // a 屬性名 console.log( data[x] ) // 1 屬性值 }
// while - 當指定的條件爲 true 時循環指定的代碼塊 var i = 0; while (i<3) { // 若是條件爲真,那就繼續執行 console.log(i); i++; } // 輸出 0 1 2 // 值得注意的是,若是你忘記增長條件中所用變量的值,該循環永遠不會結束。該可能致使瀏覽器崩潰 // do/while 循環 var i = 3; do { console.log(i); i++; } while (i<3); // 輸出 3 // 不管條件是否爲真,都先執行一邊do內的代碼塊
// 跳出循環 // break 語句用於跳出循環。 // 跳出整個循環. // continue 用於跳過循環中的一個迭代。 // 跳出當前次循環,進入下一個循環。 例如:--break for (var i=0; i<5; i++) { if(i == 1){ break; } console.log(i) } // 輸出 0 --continue for (var i=0; i<5; i++) { if(i == 1){ continue; } console.log(i) } // 輸出 0 2 3 4
而且咱們能夠給循環命名,讓 continue 或者 break 跳出指定循環,例如:
var text = ""; var i, j; // => var i; var j Loop1: // 第一個循環標籤 "Loop1" for (i = 0; i < 3; i++) { text += "i = " + i + ", j = "; Loop2: // 第二個循環標籤 "Loop2" for (j = 10; j < 15; j++) { if (j == 12) { break Loop1; } console.log( text += j + " " ); } } // 第一次輸出 i = 0, j = 10 // 第二次輸出 i = 0, j = 10 11
這裏咱們給第一個循環定義了一個名字,叫 Loop1 ,注意,這裏給循環定義的名字和 var 定義變量絲絕不衝突,例如:
var Loop1 = 999; Loop1 : for (var i = 0; i < 3; i++) { console.log(Loop1) } // 定義了Loop1,輸出的會是三次999; 可是若是不定義變量Loop1,將會拋出錯誤,只要break和continue可使用
Loop1 : for (var i = 0; i < 3; i++) { console.log(Loop1) } // Loop1 is not defined
!!!注意的是,continue只能用於循環,可是咱們的break可不止這些,還能跳出代碼塊,例如:(給某一塊代碼命名)
cars=["BMW","Volvo","Saab","Ford"]; list: { console.log( cars[0] ); // BMW console.log( cars[1] ); // Volvo console.log( cars[2] ); // Saab break list; // 跳出list標籤-代碼塊 console.log( cars[3] ); console.log( cars[4] ); console.log( cars[5] ); } console.log(list) // list is not defined console.log(typeof list) // undefiled
用法是咱們可使用名字xxx:{}去定義一整個代碼塊,當條件合適的時候跳出,注意,list 不是變量,你在先後定義一個同名變量並不會將之覆蓋,如今的寫法只是定義了
花括號內的這一塊代碼塊的名字而已。
var mycar = {make: "Honda", model: "Accord", year: 1998}; console.log("make" in mycar) // 返回true console.log("model" in mycar) // 返回true console.log("Honda" in mycar) // 返回false 不是屬性名