1. 錯誤
MDN錯誤列表
Uncaught SyntaxError: Unexpected token ')' // 語法錯誤
Uncaught ReferenceError: a is not defined // 引用錯誤等類型
Uncaught TypeError: Cannot read property 'toString' of null
-
出現一個語法錯誤,則一行代碼都不會執行(檢查通篇的語法錯誤,全部正確才執行)
-
出現引用錯誤,則中斷錯誤處及之后的代碼
-
html內寫腳本,腳本代碼塊之間互不影響,無論其中一個腳本報語法錯誤還是通用錯誤
中斷之后執行
1. //
2. //
3. //
錯誤類型 | 表現 |
---|---|
RangeError: argument is not a valid code point | String.fromCodePoint(’_’); |
RangeError: invalid array length | new Array(Math.pow(2, 40)) |
RangeError: invalid date | 【chrome不報錯,firefox報錯】 new Date(‘2014-25-23’).toISOString(); |
RangeError: precision is out of range | 77.1234.toExponential(-1); |
RangeError: radix must be an integer | (42).toString(0); |
RangeError: repeat count must be less than infinity | ‘abc’.repeat(Infinity); |
RangeError: repeat count must be non-negative | ‘abc’.repeat(-1); // RangeError |
- 數字后跟
.
會引起歧義,不知道是小數點還是調用,報語法錯誤
2. 運算
怎么得到正負無窮,NaN
怎么得到數字最后一位,最后兩位
+0 -0 相等/全等嗎
- 0 / 0 得到
NaN
是number類型(NaN
與包括自己在內的任何東西都不相等) - 1 / 0 得到
Infinity
是number類型 - -1 / 0 得到
-Infinity
是number類型 - 正負無窮互不相等更不全等
- 4 % 6得到
4
,取模a<b時,結果為a取小的 - 數字
%
10能得到最后一位,%
100得到最后兩位 - 一個詭異的問題, 這段代碼不加分號會報錯
let [a, b] = [1, 2];
console.log(a, b); // 1 2
[b, a] = [a, b];
console.log(a, b);
- 交換值
- ES6匹配
let x = 1;let y = 2;[x, y] = [y, x]console.log(x, y) // 2, 1
-
,
是運算符,只返回最后一個
-
++在后面:先打印后運算(打印的時候/參與運算的時候還沒有賦值)
-
++在前面:先運算賦值后打印
這個注意下
-
字符串之間比較,從各自首位開始查找ASCII碼(.也能查找到對應的十進制代碼)
-
.的ASCII碼比阿拉伯數字小
3. 判斷分支
- 如果條件間是互斥的,使用
if - else if
,這樣比起羅列所有的if(假設if內沒有return),能減少走多余的分支 - switch如果沒寫break,則不能中斷查詢,還會走查到后的分支
- 一般判斷結果是多個定值的用switch,判斷條件有多個語句的用if
4. 邏輯運算
- 一定是假(6個):
0
''
NaN
null
false
undefined
- 除上述以外一定是真
- 通過邏輯運算推導if語句里條件滿足的判斷
&&
遇到真就往后走,遇到假就返回,都沒有假則返回最后一個真的值||
遇到假就往后走,遇到真就返回,都沒有真則返回最后一個假的值
var a = 1 && 2
console.log(a) // 2
var a = 1 || 2
console.log(a) // 1