javascript的一些命名约定

智数映星使
• 阅读 2821

这篇小文章主要是通过一些例子来介绍一些Javascript中一些关于命名变量,函数,类或者是组件的通用约定。虽然这些规则并不是强制性的,但是呢,他们却被一些JS社区所广泛采用,所以,了解他们还是很有必要的。

Javascript命名约定:变量

由于Javascript是大小写敏感的,因此,如果有几个变量,其仅仅是大小写不一样,这些变量在Javascript中会被理解为是不同的变量,如下所示:

var name = 'Robin Wieruch';
var Name = 'Dennis Wieruch';
var NAME = 'Thomas Wieruch';
console.log(name);
// "Robin Wieruch"
console.log(Name);
// "Dennis Wieruch"
console.log(NAME);
// "Thomas Wieruch"

一个好的javascript变量名是应该能描述出他这个变量所代表的含义,因此,一般情况下,如果变量名足够清晰的话,给其增加一个注释可能没太多必要。

// bad
var value = 'Robin';
// bad
var val = 'Robin';
// good
var firstName = 'Robin';

大部分情况,你会发现javascript是会以驼峰的形式命名,并且其首字母是小写的

// bad
var firstname = 'Robin';
// bad
var first_name = 'Robin';
// bad
var FIRSTNAME = 'Robin';
// bad
var FIRST_NAME = 'Robin';
// good
var firstName = 'Robin';

不过javascript的常量,私有变量,类或者是组件的命名规则与其略有不同,我们会在下面分别介绍他们。

然而,在通常情况下,javascript的变量,不管是字符串,布尔类型,还是数字类型,对象,数组,函数,他们都是遵循驼峰的命名方式的。

现在简要描述一下常见的几种大小写命名的不同

camelCase (驼峰命名法,单词相连,第一个单词首字母小写,其他单词首字母大写) 被用在js中

PascalCase(帕斯卡命名法,单词相连,单词首字母大写) 被用于js中

snake_case(蛇形命名法,单词间以下划线分隔)

kebab-case(烤串命名法,单词间以中横线分隔)

Javascript命名约定:布尔值

布尔值的变量通常来说,一般以is,are,has等表示判断意义的单词作为其前缀,以便让开发者更好的和其他类型的变量区分开来,来看例子:

// bad
var visible = true;
// good
var isVisible = true;
// bad
var equal = false;
// good
var areEqual = false;
// bad
var encryption = true;
// good
var hasEncryption = true;

当然啦,这种命名方式也算是一种软规则,并不是强制要求的。

javascript命名约定:函数

函数一般也是以驼峰的方式来命名,不过,最好是在函数前面加一些特定的动词前缀,来明确的告诉开发者此函数的作用。

// bad
function name(firstName, lastName) {
    return `${firstName} ${lastName}`;
}
// good
function getName(firstName, lastName) {
    return `${firstName} ${lastName}`;
}
 

当然啦,函数名前面的动词前缀一般来说是没什么限制的(比如get,post,fetch,push,complete,calculate,compute等这些都可以)。这其实也是javascript变量的另一个软规则,主要就是用来让其名称变得更加的具有描述性,更容易理解。

javascript命名约定:类

与其它的数据结构相比,在javascript中的类一般是通过帕斯卡命名法(PascalCase)来定义的

class SoftwareDeveloper {
    constructor(firstName, lastName) {
    this.firstName = firstName;
        this.lastName = lastName;
    }
}
var me = new SoftwareDeveloper('Robin', 'Wieruch');

由于在类定义的时候就使用了帕斯卡命名法,因此每次通过构造器来创建一个类的新的实例的时候,其构建所用到的那个类的名称都是符合帕斯卡命名。

javascript命名约定:组件

组件并不是特别的常见,但是他一般情况下经常会用在一些像react这样的前端框架中,由于组件是可以实例化的,并且一般都是出现在DOM中,跟类有一点像。因此其也是采用帕斯卡命名法(PascalCase)的方式。

// bad
function userProfile(user) {
    return (
        <div>
            <span>First Name: {user.firstName}</span>
            <span>Last Name: {user.lastName}</span>
        </div>
    );
}
// good
function UserProfile(user) {
    return (
        <div>
            <span>First Name: {user.firstName}</span>
            <span>Last Name: {user.lastName}</span>
        </div>
    );
}

当组件被使用的时候,为了和普通的html元素做区分,所以一般来说其使用的时候也需要首字母大写。

<div>
    <UserProfile
        user={{ firstName: 'Robin', lastName: 'Wieruch' }}
    />
</div>

javascript命名约定:方法

和javascript的函数相同,类中的方法的命名也是驼峰式的。

class SoftwareDeveloper {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getName() {
        return `${this.firstName} ${this.lastName}`;
    }
}
var me = new SoftwareDeveloper('Robin', 'Wieruch');
console.log(me.getName());
// "Robin Wieruch"
 

类中方法的命名规则和函数的一样,也是以动词作为前缀,使其具有更好的描述性。

javascript命名约定:私有变量/私有函数/私有方法

一般情况下,你在函数,变量或者是方法定义中,很少能看到以下划线作为前缀(_)开头的命名方式,如果有的话,一般来说他们都是私有的。虽然他不是javascript的一个强制的规则,但是一般来说,这么做具有更好的可读性,一看到它大概就能明白它的使用方式。

比如说,类的私有方法一般情况下只能在其类的内部使用,通过这样的命名方式让人很容易的就避免了在实例中使用这个方法。

class SoftwareDeveloper {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.name = _getName(firstName, lastName);
    }
    _getName(firstName, lastName) {
        return `${firstName} ${lastName}`;
    }
}
var me = new SoftwareDeveloper('Robin', 'Wieruch');

私有方法/函数/变量也可以出现在javascript文件中,如果这么做,那这意味着该变量不应该在文件的外部使用,而仅仅应该在这个文件内处理一些相关的逻辑。

javascript命名约定:常量

javascript常量非常重要的一点是,其变量的值是不可变的,因此,为了和其他变量做区分,其变量名是要全大写的形式去书写

var SECONDS = 60;
var MINUTES = 60;
var HOURS = 24;
var DAY = SECONDS * MINUTES * HOURS;

如果常量中的单词多于一个的话,那么单词间要用下划线分隔开。

var DAYS_UNTIL_TOMORROW = 1;

javascript命名约定:全局变量

如果所有的上下文环境中,都能访问到这个变量,那么此变量一般就是全局定义的。通常情况下全局变量都定义在javascript文件中,但是如是是比较小的项目的话,此文件可能就是他的整个的项目。一般来说,全局变量的定义没有什么特殊的规定:

javascript的全局变量一般都定义在项目/文件的最顶部

如果其全局变量是可变的,则采用驼峰的形式书写。

如果其全局变量是不可变的,则采用大写的形式。

javascript命名约定:下划线

那么JavaScript变量命名中的下划线和破折号呢?由于在JS中主要考虑驼峰和帕斯卡命名法(PascalCase),因此,下划线仅很少使用,一般仅用于私有变量或常量。偶尔你也会看到下划线在其从第三方(例如数据库或API)获取信息的时候,有时会出现下划线。另一种可能会出现下划线的情况是其函数入参并未被使用到的情况,如果您尚未看到这些参数,就不用担心这些,忽略掉就好。

javascript命名约定:破折号

JavaScript变量中的破折号也不是特别好,这么做只会使一些事情处理起来变得更加困难。比如说在对象中使用它们一样:

// bad
var person = {
    'first-name': 'Robin',
    'last-name': 'Wieruch',
};
var firstName = person['first-name'];
// good
var person = {
    firstName: 'Robin',
    lastName: 'Wieruch',
};
var firstName = person.firstName;

甚至不可能直接对变量声明使用破折号

因此最好不要使用破折号。

翻译自:https://www.robinwieruch.de/javascript-naming-conventions

转载自:http://www.lht.ren/article/24/

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Node.js简介及如何学习Node.js
本文介绍Node.js的诞生史以及如何学习Node.js。Node.js简史从Node.js的命名上可以看到,Node.js的官方开发语言是JavaScript。之所以选择使用JavaScript,显然与JavaScript的开发人员多有关。总所周知,JavaScript是伴随着互联网的发展而火爆起来的,JavaScript也是前
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Linux应急响应(四):盖茨木马
0x00前言Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用Gates这个单词。分析和清除盖茨木马的过程,可以发现有很多值得去学习和借鉴的地方。0x01应急场景
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
智数映星使
智数映星使
Lv1
十步杀一人,千里不留行。——李白
文章
4
粉丝
0
获赞
0