JavaScript初学者常见错误:如何避免它们

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
```html

JavaScript 初学者(Node.js)的常见错误



JavaScript 是最流行的编程语言之一,尤其在 Node.js 环境中。然而,它的灵活性和异步特性常常成为初学者的绊脚石。在本文中,我们将分析初学者在 JavaScript 开发中常犯的 4 个最常见错误,并通过直观示例展示如何修正它们。



1. 不理解异步性和代码执行顺序



最常见的错误是期望代码像同步语言一样逐行执行。在 Node.js 中,许多操作(文件读取、数据库查询、定时器)都是异步的。



错误示例:

const fs = require('fs');let data = '';

fs.readFile('file.txt', 'utf8', (err, content) => { if (err) throw err; data = content;});

console.log(data); // 输出:''(空字符串),而不是文件内容


正确方法:

const fs = require('fs').promises;

async function readFile() { try { const data = await fs.readFile('file.txt', 'utf8'); console.log(data); // 现在将获取文件内容 } catch (err) { console.error(err); }}

readFile();


建议:始终使用 async/await 或 Promise(.then())来处理异步代码。永远不要依赖回调函数会在下一行代码之前执行。



2. 混淆作用域与关键字 var、let、const



许多初学者习惯使用 var,却不理解它没有块级作用域。这会导致在循环和条件语句中出现难以发现的错误。



使用 var 的错误示例:

for (var i = 0; i < 5; i++) {  setTimeout(() => console.log(i), 100);}// 输出:5, 5, 5, 5, 5(而不是 0,1,2,3,4)


使用 let 修正:

for (let i = 0; i < 5; i++) {  setTimeout(() => console.log(i), 100);}// 输出:0, 1, 2, 3, 4


建议:

  • const — 默认用于不会被重新赋值的变量。
  • let — 用于值会变化的变量。
  • var — 在现代代码中避免使用(在 Node.js 中几乎不需要)。


3. 对象和数组的突变(不可变性)



初学者经常直接修改原始数据,导致副作用,尤其是在使用 React、Redux 或复杂逻辑时。



错误示例:

const user = { name: '伊万', age: 30 };

function updateAge(person, newAge) { person.age = newAge; // 突变原始对象! return person;}

const updatedUser = updateAge(user, 31);console.log(user.name); // '伊万' — 没问题console.log(user === updatedUser); // true — 这是同一个对象,错误!


正确方法(创建新对象):

const user = { name: '伊万', age: 30 };

function updateAge(person, newAge) { return { ...person, age: newAge }; // 创建副本}

const updatedUser = updateAge(user, 31);console.log(user.age); // 30 — 原始对象未改变console.log(updatedUser.age); // 31


建议:对于数组,如果希望保持不可变性,请使用 map()、filter()、reduce() 代替 push() 或 splice()。



4. 忽略 Promise 和 async/await 中的错误处理



许多初学者忘记处理异步代码中的错误,这会导致整个 Node.js 应用程序崩溃。



错误示例:

async function fetchData() {  const response = await fetch('https://api.example.com/data');  const data = await response.json();  console.log(data);}

fe ```

博客

书籍推荐