强制转换
// 数值:转换后还是原来的值
Number(324) // 324
// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324
// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN
// 空字符串转为0
Number('') // 0
// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0
// undefined:转成 NaN
Number(undefined) // NaN
// null:转成0
Number(null) // 0
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
parseInt('42 cats') // 42
Number('42 cats') // NaN
parseInt('\t\v\r12.34\n') // 12
Number('\t\v\r12.34\n') // 12.34
String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
自动转换
123 + 'abc' // "123abc"
if ('abc') {
console.log('hello')
} // "hello"
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN
'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
var obj = {
width: '100'
};
obj.width + 20 // "10020"
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
错误处理机制
var err = new Error('出错了');
err.message // "出错了"
//SyntaxError 解析代码时发生的语法错误
//ReferenceError 引用一个不存在的变量时发生的错误
//RangeError 一个值超出有效范围时发生的错误
//TypeError 变量或参数不是预期类型时发生的错误
//URIError URI相关函数的参数不正确时抛出的错误
if (x <= 0) {
throw new Error('x 必须为正数');
}
//throw可以抛出任何类型的值。也就是说,它的参数可以是任何值。
//遇到throw语句,程序就中止了
// 抛出一个字符串
throw 'Error!';// Uncaught Error!
// 抛出一个数值
throw 42;// Uncaught 42
// 抛出一个布尔值
throw true;// Uncaught true
// 抛出一个对象
throw {
toString: function () {
return 'Error!';
}
};// Uncaught {toString: ƒ}
/*try代码块抛出错误,JavaScript引擎立即把代码的执行,转到catch代码块,catch接受一个参数,表示try代码块抛出的值*/
try {
throw new Error('出错了!');
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}
//try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句
openFile();
try {
writeFile(Data);
} catch(e) {
handleError(e);
} finally {
closeFile();
}
function doAction(action) {
var actions = {
'hack': function () {
return 'hack';
},
'slash': function () {
return 'slash';
},
'run': function () {
return 'run';
}
};
if (typeof actions[action] !== 'function') {
throw new Error('Invalid action.');
}
return actions[action]();
}
//switch..case结构建议用对象结构代替
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!