名字 是指代表某些东西的有助于记忆的字符序列。名字可以使我们采用符号形式标识符引用变量、常量、子程序、形参而不用采用更低级的如地址一类的概念。从低级语言到高级语言的发展过程中,名字 是抽象出来的最重要的概念之一。
名字不只是用于变量,也常用于常量、子程序、形参等。标识符一词常常与名字概念互换使用。
一、名字的长度
早期的程序设计主要用来解决数学问题,数学中常用的就是单个字符的变量。如x,y,z。
Fortran1 打破了使用单个字符名字的传统,它最多允许使用6个字符。直至到Fortran77。
Fortran95 中变量名字最多允许31个字符。
C89/Java/JavaScript/Ada/C# 对名字长度没有限制,但Ada中允许施加一种长度限制,这种限制不少于200个字符。
C99类似于C89,但名字中前63个字符必须有意义。
二、名字是否区分大小写
多数语言,如基于C的语言中(Java,JavaScript等),名字是区分大小写的。或者说这些语言中名字大小写是敏感的。
如 name,Name,NAME 是三个不同的标识符。部分人觉得很疑惑,这明明就是一个东西啊。认为这严重损害了语言的可读性。
因为看上去十分相似的名字实际上却表达了不同的实体。
三、特殊的名字-特殊字
名字中有一些受到特别关注的,称为特殊字。特殊字分为关键字 和保留字 。
关键字 ,它只在特定的上下文中式特殊的。
如JavaScript中function内的arguments,它只在function内是特殊的,你仍然可以 使用它作为标识符 ,如变量名,函数名。但显然这样会引起歧义。
保留字 ,它是程序设计语言中的特殊字,它不能用做变量、形参、子程序等的名字。
如Java中的class,JavaScript中的var。又或C、Java、JavaScript中的while,for等。这些都不能作为标识符。
这两个概念其实很清楚,但后续将其模糊了。尤其在ECMAScript5中提出了“keyword”和“Future Reserved Words”的概念。
如ECMAScript5中将var、break、for、while等称为关键字(keyword),见ECMAScript5 7.6.1.1
把为语言后续版本预留的,暂未实现的名字称为未来保留字(Future Reserved Words),见ECMAScript5 7.6.1.2
一些书籍表述也各不同,
《JavaScript高级程序设计》第二版基本上和ECMAScript 5 一致,称var、break、for,while等是关键字。见该书19页。按最早的概念是不对的,应该称保留字。
《JavaScript权威指南》第五版亦未分清关键字和保留字,2.8节大标题为“保留字”,表2-1又称“保留的JavaScript关键字”,表2-2又称“ECMA扩展保留的关键字”。实际上这些都是保留字,前者是已经实现的,后者是为语言后续版本预留的暂未实现的。
当然这一切由于ECMAScript5 自身就没有严格的区分关键字和保留字的概念。
四、大多语言,名字有以下规则
1,第一个字符时字母、下划线(_)或美元符号($)
2,剩下字符可以是字母、下划线、美元符号和数字