1.運算符
減法、除法和乘法運算符,都是將字符串自動轉爲數值,然後再運算。
2.&和||
&它的運算規則是:如果第一個運算子的布爾值爲true,則返回第二個運算子的值(注意是值,不是布爾值);如果第一個運算子的布爾值爲false,則直接返回第一個運算子的值,且不再對第二個運算子求值。
||它的運算規則是:如果第一個運算子的布爾值爲true,則返回第一個運算子的值,且不再對第二個運算子求值;如果第一個運算子的布爾值爲false,則返回第二個運算子的值。
if(i) { doSomething();} // 等價於
i && doSomething();
3.類型轉換
parseInt('42 cats')// 42
Number('42 cats')// NaN
使用Number函數,可以將任意類型的值轉化成數值。比parseInt轉換範圍寬,但也更加嚴格。
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
4.報錯類型
4.1 SyntaxError 對象
SyntaxError對象是解析代碼時發生的語法錯誤。
// 變量名錯誤
var 1a;
// Uncaught SyntaxError: Invalid or unexpected token
// 缺少括號
console.log 'hello');
// Uncaught SyntaxError: Unexpected string
4.2 ReferenceError 對象
// 使用一個不存在的變量
unknownVariable
// Uncaught ReferenceError: unknownVariable is not defined
// 等號左側不是變量
console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment
// this 對象不能手動賦值
this = 1
// ReferenceError: Invalid left-hand side in assignment
4.3 RangeError 對象
RangeError對象是一個值超出有效範圍時發生的錯誤。主要有幾種情況,一是數組長度爲負數,二是Number對象的方法參數超出範圍,以及函數堆棧超過最大值。
// 數組長度不得爲負數
new Array(-1)
// Uncaught RangeError: Invalid array length
4.4 TypeError 對象
TypeError對象是變量或參數不是預期類型時發生的錯誤。比如,對字符串、布爾值、數值等原始類型的值使用new命令,就會拋出這種錯誤,因爲new命令的參數應該是一個構造函數。
new 123
// Uncaught TypeError: number is not a func
var obj = {};
obj.unknownMethod()
// Uncaught TypeError: obj.unknownMethod is not a function
4.5 debugger
可以直接在代碼中寫debugger,頁面sources直接定位到相應位置,更加便捷。