文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何编写干净的JavaScript代码?

2024-12-13 22:15

关注

1. 更好的命名

在 JavaScript 中,良好命名的关键不在于最短的变量名,而在于最具描述性的变量名。

(1)减少幻数

将代码中的一些数字定义为一个常量,以使它更有意义,也便于后期的维护。

for (i=0; i < 8765; i++){}

const HOURS_IN_A_YEAR = 8765

for (i=0; i < HOURS_IN_A_YEAR; i++){}

(2)语义化命名

尽可能语义化变量和函数的名称。

onst expired = true; 
const e = true;

const hasExpired = true; // 布尔值应该有一个类似于is、has或was的前缀
const expiredDate = new Date()
let expiredElementsAmount = 0
let allExpiredElemnts = []

2. 保持简洁

(1)避免重复

为了更好地实现简洁的代码,应该遵循DRY(Don't Repeat Yourself)原则。减少代码的重复。

  async function notifyUsers(userIds, message) {
userIds.foreach(userId => {
const user = await User.findByPk(userId)
if(user.isSubscribed) {
const Notification = await Notifications.create({
date: new Date(),
user_id: userId,
message,
emailNotify: true });
Notification.save();
} else {
const Notification = await Notifications.create({
date: new Date(),
user_id: userId,
message,
emailNotify: true });
Notification.save();
}
}
}

async function notifyUsers(userIds, message) {
userIds.foreach(userId => {
const user = await User.findByPk(userId)
notifyUsers(userId, message, user.isSubscribed)
}
}

async function createNotification(userId, message, isSubscribed) {
const Notification = await Notifications.create({
date: new Date(),
user_id: userId,
message,
emailNotify: isSubscribed });
Notification.save();
}

(2)使用递归

有些情况下,使用递归的代码会比迭代更加简洁。

const stepsToHundred = (number) => {
let steps = 0

while(number < 100) {
number *= 2
steps++
}

return steps
}

const stepsToHundred = (number, steps) =>
number < 100 ? stepsToHundred(number * 2, steps + 1) : steps

(3)字符串连接

ES6中新增了模板字符串功能使我们可以在拼接字符串时代码更短、更简洁。

const welcomeMessage = "你好" + user1 + ", 我是" + user2;

const welcomeMessage = `你好 ${user1}, 我是 ${user2}`

3. 减少多层嵌套

(1)条件语句

不要将 return 语句嵌套到 if-else 中。

const getUSTime = (time) => {
if(time <= 12){
return time + "AM"
} else {
return time + "PM"
}
}

const getUSTime = (time) => {
if(time <= 12) return time + "AM"
return time + "PM"
}

也可以使用三元表达式来写:

const getUSTime = (time) => {
return time + (time <= 12 ? "AM" : "PM")
}

(2)async/await

当使用链式的 Promise 时,代码的可读性就会变差。可以使用async/await来优化异步嵌套的代码。

const sharePost = () => {
getPost().then(post => {
sendTweet(post.url, `分享一篇文章: ${post.title}`)
.then(() => {
console.log("分享成功");
});
});
}

const sharePost = async () => {
const post = await getPost();
await sendTweet(post.url, `分享一篇文章: ${post.title}`)
console.log("分享成功");
}

4. 干净的函数

(1)处理大量参数的函数

当函数的参数很多时,需要按照顺序传递参数就很麻烦,可以使用对象包装所有的参数,这样传递参数时就可以乱序传递,避免传参时出错。

function addUser(firstName, lastName, age, city, state, zipCode) {
// ...
}

function addUser({ firstName, lastName, age, city, state, zipCode }) {
// ...
}

(2)单一责任原则

使用单一职责原则,可以轻松的命名函数,每个函数只做一件事。可以通过它的名称确切地知道该函数的作用,并且该函数不会是冗长的。

async function signupUser(email) {
const user = await User.create({ email });
await user.save();

const notifcation = await Notification.create({ email });
await notifcation.save();

const date = new Date()
Log.add(date, "已注册", email)
}

const logSignup(email) => Log.add(new Date(), "已注册", email)

async function signupUser(email) {
createUser(email)
notifyUser(email)
logSignup(email)
}

async function createUser(email) {
const user = await User.create({ email });
await user.save();
}

async function notifyUser(email) {
const notifcation = await Notification.create({ email });
await notifcation.save();
}

(3)回调中首选箭头函数

在 JavaScript 中,map、filter等方法都需要一个匿名函数作为参数,在这些情况下,使用箭头函数是最方便和优雅的方式

[1, 2, 3].forEach(function (x) {
const y = x ** 2;
return x + y;
});

[1, 2, 3].forEach((x) => {
const y = x ** 2;
return x + y;
});

来源:前端充电宝内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯