数据类型转换、错误处理机制
1. '4'+'3'与'4'-'3'的返回值各是多少?
Js真的是神奇的语言,这道题可以完美诠释这句话。
在Js中两个String相加的意思是两个字符串的拼接所以'4'+'3'='43',
而两个String类型的数值相减Js会自动转换为Number,然后相减。
即'4'-'3'=1, 这里的1是Number类型。当然,如果算子不能被转成Number,
那么返回的结果是NaN... WTF???
2. Number(undefined), Number(NaN), Number(null)返回结果是什么?
分别是NaN,NaN, 0。包括Number('123abc')返回也是NaN,因为NaN的意思
就是无法用数字表示,而null表示什么都没有,所以转换成数字也是0,
Number('')与Number(false)都返回0.
3. Number和parseInt的区别?
Number较为严格,parseInt是逐位去转换,遇到不能转换的位就把前面转换的结果返回,
但是Number一旦遇到无法转换的位就会直接返回NaN。
4. Number方法的执行过程?
(1)先调用对象本身的valueOf方法,如果返回原始类型数据,那么直接调用Number;
(2)如果valueOf返回的是对象,那么调用对象toString方法,如果返回原始类型数据然后执行(1);
(3)如果toString返回仍然是对象,那么报错。
示例:
var obj = {x: 1};
Number(obj) // NaN
// 等同于
if (typeof obj.valueOf() === 'object') {
Number(obj.toString());
} else {
Number(obj.valueOf());
}
5. String方法的执行过程?
(1)先调用对象的toString方法,如果返回的是原始类型数据则执行String;
(2)如果返回对象,则调用valueOf,之后如果返回原始类型数据就执行String;
(3)调用valueOf后如果返回对象,那么报错。
6. 自动转换类型的三种情况?
(1)不同类型的数据进行运算
比如:123 + 'abc' = '123abc'
(2)对非布尔值类型的数据求布尔值
比如:在条件控制语句中
(3)对非数值类型使用一元运算符
自动转换类型的规则是:预期什么样的值就转换成为什么样的值。
7. Error有哪几种属性?
标准属性message,非标准属性stack,name
8. Error有几个派生对象?
(1)SyntaxError 对象是解析代码时发现语法错误
(2)ReferenceError 对象应用了一个不存在的变量
(3)RangeError 对象是一个值超出范围时发生的错误
(4)TypeError 对象是变量或者参数不是预期类型时发生的错误
(5)URIError 对象是URI相关函数的参数不正确时抛出的错误
(6)EvalError 对象是eval没有被正确执行时抛出的错误。
这些对象都能接收一个参数:message
9. 自定义错误对象
function UserError(message) {
this.message = message || '默认信息';
this.name = 'UserError';
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
new UserError('这是自定义错误')
网友评论