正如许多开发人员所熟悉的那样,编写 JavaScript 代码可能具有挑战性,有时甚至令人生畏。 工作过程中难免会出现错误,有的错误还经常重复出现。 本文针对新手开发人员,讨论这些错误以及如何解决它们。 为了清楚起见,函数、属性和对象的名称取自
我们提醒: 对于“Habr”的所有读者 - 使用“Habr”促销代码注册任何 Skillbox 课程可享受 10 卢布的折扣。
技能箱推荐: 实践课程
“移动开发者专业版” .
类型错误:属性未定义
let girl = {
name: "Lucky",
location: "Hollywood",
profession: "star",
thingsMissingInHerLife: true,
lovely: true,
cry: function() {
return "cry, cry, cries in her lonely heart"
}
}
console.log(girl.named.lucky)
上面的示例代码抛出错误 Uncaught TypeError: Cannot read property 'lucky' of undefined。 问题在于,girl 对象没有命名属性,尽管它确实有 name 属性。 由于 Girl.named 属性未定义,因此您无法访问它,因为形式上它不存在。 但如果你用girl.name替换girl.named.lucky,那么一切都会正常,程序将返回Lucky。
您可以了解更多有关属性的信息
如何解决类型错误
当程序员尝试对与特定类型不匹配的数据执行操作时,就会发生类型错误。 示例包括使用 .bold()、请求未定义的属性或调用实际上不是函数的函数。
因此,如果您尝试调用 Girl(),您将收到错误 Uncaught TypeError: yourVariable.bold is not a function and Girl is not a function,因为它实际上是被调用的对象,而不是函数。
为了消除错误,您需要研究变量。 那么,什么是女孩呢? 女孩.name是什么? 您可以通过分析代码、使用 console.log、调试器命令显示变量或在控制台中调用变量名称来找出答案。 您需要确保可以对变量中包含的数据类型进行操作。 如果不合适,请更改它,例如添加条件或 try..catch 块 - 并获得对操作执行的控制。
堆栈溢出
如果你相信《Baby One More Time》这首歌的歌词作者(这是布兰妮·斯皮尔斯,是的),那么在这种情况下,“hit”这个词意味着歌手渴望再次被召唤(这里是对这首歌的背景的解释)歌曲-译者注)。 这种愿望很可能会导致现实生活中打电话的数量增加。 但在编程中,这是一种递归,如果调用堆栈溢出,可能会导致错误。
错误看起来像这样:
错误:堆栈空间不足(边缘)
内部错误:递归过多(Firefox)
RangeError:超出最大调用堆栈大小(Chrome)
如果开发人员在递归中没有考虑基本情况,或者代码没有解决预期情况,就会发生堆栈溢出。
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness++
return oneMoreTime(stillBelieve, loneliness)
}
在这种情况下, stillBelieve 永远不会为 false,因此每次都会调用 oneMoreTime,但该函数永远不会完成。
如果你开始依赖两个朋友,这会减少孤独感,你也不必等待电话。
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness--
stillBelieve = false
return oneMoreTime(stillBelieve, loneliness)
}
一个例子是无限循环的情况,即系统不会生成错误消息,但执行 JavaScript 代码的页面只是冻结。 如果 while 循环没有终止条件,就会发生这种情况。
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
}
您可以通过以下方式解决问题:
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
worldEnded = true
}
调试无限循环和递归
如果遇到无限循环问题,则需要关闭 Chrome 或 Edge 中的选项卡,并关闭 Firefox 中的浏览器窗口。 之后,你需要仔细分析代码。 如果找不到问题,则值得在循环或函数中添加调试器命令并检查变量的值。 如果结果与预期不符,那么我们将其替换,这可以很容易地完成。
在上面的示例中,应将调试器添加为函数或循环的第一行。 然后你需要在 Chrome 中打开调试选项卡,分析作用域中的变量。 使用下一个按钮,您可以跟踪每次迭代的更改。 这一切都很容易做到,并且大多数情况下都能找到问题。
您可以在这里阅读有关这一切的更多信息(
语法错误
JavaScript 中最常见的错误之一是 SyntaxError。 文本编辑器扩展将帮助您避免它们。 例如,Bracket Pair Colorizer 用不同的颜色标记代码中的括号,Prettier 或类似的分析工具可以快速发现错误。 减少语法错误可能性的最佳选择是最小化嵌套。
在评论中分享:您如何防止错误或快速发现并消除错误?
技能箱推荐:
- 两年实践课程
“我是一名专业网络开发人员” .- 在线课程
《C#开发从0开始》 .- 实践年课程
《PHP 开发者从 0 到 PRO》 .
来源: habr.com