haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.28k stars 3.25k forks source link

[js] 第441天 ReferenceError和TypeError有什么区别? #2580

Open haizhilin2013 opened 4 years ago

haizhilin2013 commented 4 years ago

第441天 ReferenceError和TypeError有什么区别?

3+1官网

我也要出题

wheatup commented 4 years ago

ReferenceError

指的是引用出错,比如尝试访问未定义的变量,或者提前访问无提升的变量,都会引发这个错误:

console.log(foo);  // ReferenceError: foo is not defined
let foo = 1;

TypeError

指的是类型出错。

众所周知JavaScript是一个弱类型的语言,这既是它的优点,也经常被人诟病。你永远也不知道 a + b 是在做数值加减还是字符串拼接,而且似乎 a + b 几乎从来也不会报错。

而tc39自 ES5 到 ES6 以来,将 TypeError 的频率几乎翻了4倍之多。目的就是为了规范和强调类型这一概念,避免过于模糊类型这一概念导致JavaScript对于语义的不确定性。

Symbol() + 1; // TypeError: Cannot convert a Symbol value to a number

({ toString: () =>({}) }) + 'a';  // TypeError: Cannot convert object to primitive value

这样使得JavaScript更为规范,当一个方法的参数需要一个 number 但却收到了一个 object,与其让它返回 NaN,不如果断地抛出 TypeError 吧。

YoungZIC commented 4 years ago

官网有严重bug啊,查看评论那一块一直让登录,也成功不了

haizhilin2013 commented 4 years ago

官网有严重bug啊,查看评论那一块一直让登录,也成功不了

好的,感谢反馈

haizhilin2013 commented 4 years ago

@haizhilin2013

官网有严重bug啊,查看评论那一块一直让登录,也成功不了

好的,感谢反馈

刚测试,是可以登录成功的,不知道你那能否方便截个图看看

YoungZIC commented 4 years ago

@haizhilin2013

@haizhilin2013

官网有严重bug啊,查看评论那一块一直让登录,也成功不了

好的,感谢反馈

刚测试,是可以登录成功的,不知道你那能否方便截个图看看

我刚才试了下没有那个bug了,可能是网速的原因吧,但是详情页的个人中心头像点击跳转404

haizhilin2013 commented 4 years ago

@haizhilin2013

@haizhilin2013

官网有严重bug啊,查看评论那一块一直让登录,也成功不了

好的,感谢反馈

刚测试,是可以登录成功的,不知道你那能否方便截个图看看

我刚才试了下没有那个bug了,可能是网速的原因吧,但是详情页的个人中心头像点击跳转404

因为官网没有保存个人的头像,获取的是github的头像,但github头像会经常挂掉,这是个问题,感谢反馈

d4c-27 commented 2 years ago

SyntaxError(语法错误) ReferenceError(引用错误):引用了不存在的变量 RangeError(范围错误):超出有效范围 TypeError(类型错误):对原始类型的值使用new命令、调用对象不存在的方法 URLError(URL错误) EvalError(eval错误):eval函数没有被正确执行