美文网首页
阮一峰JS教程读后感(三)Js语法(上)

阮一峰JS教程读后感(三)Js语法(上)

作者: 前端艾希 | 来源:发表于2019-06-13 12:08 被阅读0次

数据类型转换、错误处理机制


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('这是自定义错误')

相关文章

网友评论

      本文标题:阮一峰JS教程读后感(三)Js语法(上)

      本文链接:https://www.haomeiwen.com/subject/mdwjfctx.html