摘要:这段代码工作正常,尽管没有用分号在某些场景下是很管用的,特别是,有时候可以帮助减少代码错误。比如不好的写法尽管这段代码能正常工作,但代码中我们应尽量避免使用。
前言在我们平时工作中写代码是最频繁的事情了,但我们的代码真的"好看"吗?
预计本文阅读时间(10分钟)
正文 1.1--语句结尾我们来看一段代码
//合法的代码
var name = "Dreams";
function sayName() {
alert(name);
}
//合法的代码,但不推荐这样写
var name = "Dreams"
function sayName() {
alert(name)
}
这里我们可以看到上面两段代码的区别就是在于一段加了分号,一段没有加,那么问题来了,我们到底该不该加分号?
这里其实有赖于分析的自动分号插入(Automatic Semicolon Insertion, ASI)机制,Javascript代码省略分号也是可以正常工作的。ASI会自动寻找代码中应当使用分号但实际没有分号额位置,并插入分号。大多数场景下ASI都会正确插入分号,不会产生错误。但ASI的分号插入规则非常复杂且很难记住,因此推荐大家不要省略分号。看一下这段代码:
// 原始代码
function getData() {
return
{
title: "Dreams",
author: "Dreams"
}
}
//分析器会将它理解成
function getData() {
return;
{
title: "Dreams",
author: "Dreams"
};
}
在这段代码中,函数getData()的本意是返回一个包含一些数据的对象。然而,return之后新起了一行,导致return后被插入了一个分号,这会导致函数返回值是undefined. 可以通过将左花括号移至与return同一行的位置来修复这个问题。
//这段代码工作正常,尽管没有用分号
function getData() {
return {
title: "Dreams",
author: "Dreams"
}
}
ASI在某些场景下是很管用的,特别是,有时候ASI可以帮助减少代码错误。当某个场景我们认为不需要插入分号而ASI认为需要插入时,常常会产生错误。所以我们尽量养成加分号的习惯,在某种意义上加上分号还提高程序的性能哦!
1.2--换行当一行长度达到了单行最大字符数限制时,就需要手动将一行拆成两行。通常我们会在运算符后换行,下一行会增加两个层级的缩进。比如这样。
在这个例子中,逗号时一个运算符,应当作为前一行的行尾。这个换行位置非常重要,因为ASI机制会在某些场景下在行结束的位置插入分号。总是将一个运算符置为行尾,ASI就不会自作主张地插入分号,也就避免了错误的发生。
1.3--命名
我们只要是代码,都会涉及变量和函数,因此变量和函数命名对于增强代码可读性至关重要。那么在js中,ECMAScript推荐我们遵循**驼峰式大小写(Camel Case)**的命名方式.这种命名方式是小写字母开始的,后续每个单词首字母都大写,比如:
var thisMyName;
var anotherVariable;
var aVeryLongVariableName;
函数的命名
我们推荐函数函数前用动词开头
//好的写法
var count = 10;
var myName = "Dreams"
var found = true
//不好的写法:变量看起来像函数
var getCount = 10;
var isFound = true;
//好的写法
function getName() {
return myName;
}
//不好的写法:函数看起来像变量
function theName() {
return myName;
}
命名是一种学问,更是一门技术!,通常我们应尽量保持尽可能的简短,抓重点的命名方式。通过函数命就大概可以看出这个是干什么的函数。记住写代码永远不是在给自己写,而是在给你下一个接手的人写,所以代码写的规范对大家都有好处 我们推荐的函数有:can has is get set 例如:canDo hasClass isBlack getData setData
1.4--nullnull是一个特殊值,但我们常常误解它,将它和undefined搞混。在下列场景中应当使用null.
用来初始化一个变量
用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象
当函数的参数期望是对象时,用作参数传入。
当函数的返回值期望是对象时,用作返回值传出
还有下面一些场景不应当使用null.
不要使用null来检测是否传入了某个参数。
不要用null来检测一个未初始化的变量
示例代码:
//好的用法
var person = null;
function getPerson() {
if (condition) {
return new Person("Dreams");
} else {
return null;
}
}
var person = getPerson();
if (person !== null) {
doSomething();
}
//不好的写法:用来和未初始化的变量比较
var person;
if (person != null) {
doSomething()
}
//不好的写法:用来和未初始化的变量比较
var person;
if (person != null) {
doSomething();
}
//不好的写法:检测是否传入了参数
function doSomething(arg1,arg2,arg3,arg4) {
if (arg4 != null) {
doSomethingElse();
}
}
1.5--undefined
undefined是一个特殊值,我们常常把它和null搞混。其中一个让人颇感困惑的就是null == undefined结果是true。然而,这两个值的用途却各不相同。那些没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。比如:
//不好的写法
var person;
console.log(person === undefined);//true
尽管这段代码能正常工作,但代码中我们应尽量避免使用undefined。这个值常常和返回"undefined"的typeof运算符混淆。事实上,typeof的行为也很让人费解,因为不管值是undefined的变量还是未声明的变量,typeof运算结果都是"undefined",比如:
//foo未被声明
var person;
console.log(typeof person);//"undefined"
console.log(typeof foo)//"undefined"
在这段代码中,person和foo都会导致tpyeof返回"undefined" 当变量未声明时,如果你使用了一个可能(或可能不会)赋值为一个对象的变量时,则将其赋值为null
//好的做法
var person = null;
console.log(person === null);//true
将变量初始值赋值为null表明了这个变量的意图,他最终很可能赋值为对象。typeof运算符运算null的类型时返回"object",这样就可以和undefined区分开了
1.6--对象字面量声明数组和对象时推荐下面的做法
//好的写法
var book = {}
var numbers = [1,2,3,4]
//不好的写法
var book = new Object();
var numbers = new Array(1,2,3,4)
结语
本文内容参考至<<编写可维护的javascript>>
在日常工作中我们应当合理使用上述方法对变量/方法/对象/数组进行管理,而不是胡乱的起名和管理,这样会对我们项目后续的维护不利,如果大家还有什么好的习惯,可以在评论区提出哦。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/7356.html
摘要:一旦到达顶层全局作用域,可能找到,也可能没有找到,查找过程都必须停止。当引擎执行查询时,如果查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出异常。代表作用域判别失败相关,而则代表作用域判别成功了,但是对结果的操作是非法或不合理的。 什么是作用域 对于几乎所有编程语言,最基本的功能之一就是能够存储变量的值,并且能在之后对这个值进行访问和修改。这样就会带来几个问题,这些变量存储在哪...
摘要:围观本文需自备,,以及。使用打开,并点击,会看到模拟器以及此项目对应的内容,效果如下如果想要修改显示内容,请打开,里面是一堆模样的东西。接下来,我们按照教程,来展示一张电影海报,为了方便,我们直接修改。 原文链接:http://www.tinghaige.com/ 本着什么都要搀和的原则,一起来看看React Native是如何开发iOS APP。 围观本文需自备Mac OSX ,...
摘要:如果解析失败则终止运行。如果新对象的并不匹配当前对象的则抛出异常。替换当前对象为新对象。是替换,也就是说会覆盖到目标元素之前本身所具有的全部样式继承的不算。除此以外,下返回的属性和值全是大写,为了避免日后出现意外,还是比较好。 一、cssText之起步 那些年,我们是这样设置样式的: xxx.style.width = 233px; xxx.style.position = fix...
摘要:如果解析失败则终止运行。如果新对象的并不匹配当前对象的则抛出异常。替换当前对象为新对象。是替换,也就是说会覆盖到目标元素之前本身所具有的全部样式继承的不算。除此以外,下返回的属性和值全是大写,为了避免日后出现意外,还是比较好。 一、cssText之起步 那些年,我们是这样设置样式的: xxx.style.width = 233px; xxx.style.position = fix...
摘要:如有错误,欢迎指正。如果使用了进行反向代理,那么和后端的之间默认是用协议通信的。如果不是这样,最好设置为,因为这会造成额外的开销。一个比较好的处理方式是放在或级别单独处理。 无论是前端还是后端,在部署项目时,时常免不了用到Nginx,小项目也时常做个反向代理啥的。今天就简单直接,聊一下其中的一个点——gzip。如有错误,欢迎指正。 一般服务器端常用的是 Ubuntu、CentOS、Li...
阅读 5264·2021-09-22 15:59
阅读 1855·2021-08-23 09:42
阅读 2560·2019-08-29 18:42
阅读 3443·2019-08-29 10:55
阅读 2057·2019-08-27 10:57
阅读 1759·2019-08-26 18:27
阅读 2721·2019-08-23 18:26
阅读 2911·2019-08-23 14:40