今天来分享几个编写干净的JavaScript代码的技巧!
在 JavaScript 中,良好命名的关键不在于最短的变量名,而在于最具描述性的变量名。
将代码中的一些数字定义为一个常量,以使它更有意义,也便于后期的维护。
:x:
for (i=0; i < 8765; i++){}
:white_check_mark:
const HOURS_IN_A_YEAR = 8765
for (i=0; i < HOURS_IN_A_YEAR; i++){}
尽可能语义化变量和函数的名称。
:x:
onst expired = true;
const e = true;
:white_check_mark:
const hasExpired = true; // 布尔值应该有一个类似于is、has或was的前缀
const expiredDate = new Date()
let expiredElementsAmount = 0
let allExpiredElemnts = []
为了更好地实现简洁的代码,应该遵循DRY(Don't Repeat Yourself)原则。减少代码的重复。
:x:
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();
}
}
}
:white_check_mark:
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();
}
有些情况下,使用递归的代码会比迭代更加简洁。
:x:
const stepsToHundred = (number) => {
let steps = 0
while(number < 100) {
number *= 2
steps++
}
return steps
}
:white_check_mark:
const stepsToHundred = (number, steps) =>
number < 100 ? stepsToHundred(number * 2, steps + 1) : steps
ES6中新增了模板字符串功能使我们可以在拼接字符串时代码更短、更简洁。
:white_check_mark:
const welcomeMessage = "你好" + user1 + ", 我是" + user2;
:x:
const welcomeMessage = `你好 ${user1}, 我是 ${user2}`
不要将 return 语句嵌套到 if-else 中。
:x:
const getUSTime = (time) => {
if(time <= 12){
return time + "AM"
} else {
return time + "PM"
}
}
:white_check_mark:
const getUSTime = (time) => {
if(time <= 12) return time + "AM"
return time + "PM"
}
也可以使用三元表达式来写:
const getUSTime = (time) => {
return time + (time <= 12 ? "AM" : "PM")
}
当使用链式的 Promise 时,代码的可读性就会变差。可以使用async/await来优化异步嵌套的代码。
:x:
const sharePost = () => {
getPost().then(post => {
sendTweet(post.url, `分享一篇文章: ${post.title}`)
.then(() => {
console.log("分享成功");
});
});
}
:white_check_mark:
const sharePost = async () => {
const post = await getPost();
await sendTweet(post.url, `分享一篇文章: ${post.title}`)
console.log("分享成功");
}
当函数的参数很多时,需要按照顺序传递参数就很麻烦,可以使用对象包装所有的参数,这样传递参数时就可以乱序传递,避免传参时出错。
:x:
function addUser(firstName, lastName, age, city, state, zipCode) {
// ...
}
:white_check_mark:
function addUser({ firstName, lastName, age, city, state, zipCode }) {
// ...
}
使用单一职责原则,可以轻松的命名函数,每个函数只做一件事。可以通过它的名称确切地知道该函数的作用,并且该函数不会是冗长的。
:x:
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)
}
:white_check_mark:
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();
}
在 JavaScript 中,map、filter等方法都需要一个匿名函数作为参数,在这些情况下,使用箭头函数是最方便和优雅的方式
:x:
[1, 2, 3].forEach(function (x) {
const y = x ** 2;
return x + y;
});
:white_check_mark:
[1, 2, 3].forEach((x) => {
const y = x ** 2;
return x + y;
});
一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间
良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。
减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!
Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。
程序员似乎忘记了软件的真正目的,那就是解决现实问题。您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。有人说:如果你拥有的只是一把锤子,那么一切看起来都像钉子一样
TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。
函数式编程对应的是命令式编程, 函数式编程的核心当然是对函数的运用. 而高阶函数(Higher-order)是实现函数式编程的基本要素。高阶函数可以将其他函数作为参数或者返回结果。所以JS天生就支持函数式编程
朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构
页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮
软件工程学什么? 学计算机,写程序,做软件,当程序员。听说学计算机很辛苦? 是的,IT行业加班现象严重。在计算机世界里,技术日新月异,自学能力是程序员最重要的能力之一。选了这个专业,就要时刻保持好奇心和技术嗅觉,不能只满足于完成课内作业。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!