为了回馈社区,codeburst 从他们公司的上千个项目中,整理了 JavaScript 出现次数最多的 10 个错误。如果能避免这些错误的话,那么你能成为一个更好的程序员。以下就是排名最高的 10 个 错误:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(1)

Uncaught TypeError: Cannot read property

这个错误大家应该经常碰到,当你在 Chrome 浏览器中,从一个 undefined 的对象上尝试读取一个属性或者调用一个方法的时候,就会抛出这个错误:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(2)

TypeError: ‘undefined’ is not an object (evaluating

上述相同的错误,在 Safari 浏览器中给出的是不同的错误信息,在 Safari 浏览器上实验可以得到这个结果。

TypeError: null is not an object (evaluating

在 Safari 浏览器上,从一个 null 对象上读取属性或者调用方法的时候,就会抛出这个错误。在 JavaScript 的世界里,null 和 undefined 是不同的,null 代表这个对象是一个空的值,而 undefined 代表这个对象的值没有定义。

这种错误较为常见的出现方式是,在页面尚未加载完毕的时候,就直接操作 DOM,而实际上这个 DOM 节点现在还是一个 null。所以一定要等页面加载完毕后,再操作 DOM:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(3)

(unknown): Script error

如果你的 JavaScript 代码放在 CDN 上,那么这段代码抛出的任何未捕获的错误都会报脚本错误。这是浏览器的防止代码跨源访问的一种安全机制。

TypeError: Object doesn’t support property

在 IE 浏览器上,当你调用一个未定义的方法时,就会出现这个错误。这个和下面介绍的 Chrome 浏览器上抛出的 “TypeError: ‘undefined’ is not a function”错误是一个类型。​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(4)

TypeError: ‘undefined’ is not a function

在 Chrome 浏览器上调用一个未定义的方法时,会抛出这个错误。​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(5)

​JavaScript 近些年的发展趋势比较快,开发复杂度逐步增加,所以开发者可能会弄混当前的 this 究竟是指向哪个对象:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(6)

Uncaught RangeError: Maximum call stack

这种情况是因为函数递归,超出了栈的最大大小限制,这个时候应该仔细检查参数的变化,它可能没有按照你想象的那样变化:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(7)

TypeError: Cannot read property ‘length’

从一个未定义的变量上尝试读取它的长度属性,会发生这样的错误:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(8)

​开发者错误的假定当前的数组一定是初始化后的,而实际上忘记传递参数是常有的事儿:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(9)

Uncaught TypeError: Cannot set property

我们不能在一个未定义的变量上,调用任何 set 或者 get 方法:​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(10)

ReferenceError: event is not defined

在事件处理的时候,比较容易得到这样的错误。旧版本的 IE 浏览器提供了一个全局可访问的 event 变量,Chrome 自动将 event 对象绑定到回调函数上,Firefox 却不会自动绑定。于是 jQuery 就为大家提供了一个统一的访问事件对象的方式。​

实用干货javascript的7个使用技巧(JavaScript最容易犯的10)(11)

总结

大多数错误都是因为 null 或 undefined 引起的错误。使用静态类型的 JavaScript 语言例如 TypeScript 可以有效帮你应对这些情况,它会给予你一些警告信息。希望大家在以后的编程中,尽量避开这些错误,它们看起来微不足道,却又是大家最常犯的错误。

,