
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
对于软件编程过程中出现的代码错误问题相信大多数的软件开发工程师应该都遇到过这样的问题了。今天我们就给大家简单总结了在使用js代码编程过程中,都有哪些比较常见的编程错误问题,下面我们就一起来了解一下具体情况吧。
1.Uncaught TypeError: Cannot read property
如果你是一名JavaScript开发者,对这个错误可能已经熟视无睹。在Chrome里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Chrome开发者控制台可以很容易地重现这个错误。
发生这个错误的原因有很多,其中常见的是,在渲染UI组件时没有正确初始化状态。
2. TypeError: ’undefined’ is not an object
在Safari里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误。这个错误与发生在Chrome里的是差不多的,只是Safari为它提供了不同的错误信息。
3. TypeError: null is not an object
在Safari里读取空(null)对象的属性或调用空对象的方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误。
有意思的是,在JavaScript里,null和undefined其实是不一样的,所以我们会看到两个不同的错误消息。undefined表示未赋值的变量,而null表示变量值为空。可以使用严格等于号来证明它们不是同一个东西。
在实际应用当中,在JavaScript里调用一个未加载的DOM元素就会出现这个错误。如果对象为空,DOM API就会返回null。
DOM元素需要在创建之后才能被访问。JavaScript代码是按照从上到下的顺序进行解析的,所以,如果在DOM元素之前有一个标签包含了JavaScript代码,浏览器在解析HTML时就会执行这些代码。在加载JavaScript之前,如果DOM元素没有被创建,就会出现这个错误。
4. (unknown): Script error
跨域的未捕捉JavaScript异常会变成Script error。例如,假设JavaScript托管在CDN上,那么未捕捉的错误(错误没有在try-catch里被捕获,一路直上到了window.onerror里)就会显示成“Script error”,而不是显示具体的错误消息。这是浏览器出于安全方面的考虑,防止跨域传递数据。
要想获得具体的错误信息,可以这样做:
1).使用Access-Control-Allow-Origin
将Access-Control-Allow-Origin设置成“*”,表示该资源可以被任何一个域访问。如果有必要,可以把“*”替换成你的域名,例如Access-Control-Allow-Origin: #。不过,如果使用了CDN,那么要支持多个域名可能就会得不偿失,因为CDN存在缓存问题。
5. TypeError: Object doesn’t support property
在IE里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在IE开发者控制台可以很容易地重现这个错误。
这个错误与Chrome里的“TypeError: ‘undefined’ is not a function”是同一个东西。不同的浏览器为相同的错误提供的错误消息可能是不一样的。
在IE里使用JavaScript的命名空间时,就很容易碰到这个错误。发生这个错误十有八九是因为IE无法将当前命名空间里的方法绑定到this关键字上。
6. TypeError: ‘undefined’ is not a function
在Chrome里调用一个未定义的函数时就会发生这个错误,可以在Chrome开发者控制台和Mozilla开发者控制台重现这个错误。
近年来,JavaScript的编码技术和设计模式变得日趋复杂,回调和闭包中的自引用情况越来越普遍,让人搞不清楚代码中的this/that表示的是什么意思。
7. Uncaught RangeError: Maximum call stack
在Chrome里,有几种情况会发生这个错误,其中一个就是无限递归调用一个函数。这个错误可以在Chrome开发者控制台重现。
当传给函数的值超出可接受的范围时也会出现这个错误。很多函数只接受指定范围的数值,例如,Number.toExponential(digits)和Number.toFixed(digits)只接受0到20的数值,而Number.toPrecision(digits)只接受1到21的数值。
8. TypeError: Cannot read property ‘length’
在Chrome里读取undefined变量的length属性时会发生这个错误,这个错误可以在Chrome开发者控制台重现。
length是数组的属性,但如果数组没有初始化或者数组的变量名被另一个上下文隐藏起来的话,访问length属性就会发生这个错误。
9. Uncaught TypeError: Cannot set property
我们无法对undefined变量进行赋值或读取操作,否则的话会抛出“Uncaught TypeError: cannot set property of undefined”异常。
例如,在Chrome中:
如果test对象不存在,就会抛出“Uncaught TypeError: cannot set property of undefined”异常。
10. ReferenceError: event is not defined
在访问一个未定义的对象或超出当前作用域的对象时就会发生这个错误,这个错误可以在Chrome开发者控制台重现。
如果在进行事件处理时遇到这个错误,请确保事件对象被作为参数传入到函数当中。旧浏览器(IE)提供了全局的event变量,但并不是所有的浏览器都会这样。
作者:Rollbar
译者:薛命灯
来源:infoq
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。