关于JavaScript词法
上篇博文发出来后感觉效果不是很好,遂写篇文章来解释解释。本文可以认为是上篇文章 JavaScript词法(http://www.cnblogs.com/winter-cn/archive/2012/04/17/2454229.html)的扫盲说明:)
但凡语言,不论是自然语言还是程序语言,都大致可以区分词法和语法。所谓词,就是语言中有意义的最小单元。
常常听到一个笑话,说“我英语学的可好啦,26个字母全认识!”。大家都知道,一切英文都是由26个字母组成的,为啥26个字母全认识,还不能说会英文呢?
答案就是字母不是词,单独的字母是没有意义的,只有字母组成了词,才会有表达意义的能力。所以学英语的时候,最重要的是"背单词"。
别人问你,h是什么意思啊?——h没有任何意思,只有它出现在help,hello这样的词里面,h才有意义。
对计算机语言来说,同样的道理,每个Unicode或者ASCII字符都是没有意义的,只有它们形成了"词",才有意义。
所以对任何一门计算机语言来说,最基本的规则就是词法,JavaScript里面,所谓的"词",实际上大家早已非常熟悉了,比如:
if while else for function之类的关键字
Cat Dog play等用户定义的变量名,正式的叫法是标识符
"abc" 13.5 /abc/g true false等表示变量值的直接量
圆括号 方括号 花括号 加号 等符号
回车等换行符
空格、Tab等空白符
注释
经过很多年的发展,计算机语言的词法定义基本形成了一个通用的套路。一般来讲,一切合法的“词”,被统称作“输入元素(InputElement)”。
输入元素中,一切有意义的词被称作"token"(这个词到目前为止没有被广泛接受的翻译方法,所以保留),在一般的认识中,token以外的InputElement被扫描出来之后就可以直接丢弃了(当然实际情况是对大部分语言来说都是不行的,JavaScript也不行。)所以词法分析程序,大部分叫做lexer,也有人喜欢叫做tokenizer。
除了真正有意义的token之外,其它InputElement都是起到修饰或者增加源代码可读性的作用。在JS中,就只有以下三种:
WhiteSpace:空白符
LineTerminator:行终结符
Comments:注释
这三种都很好理解,是大家平时非常常用的东西。
大部分编程语言的词法区别都体现在token上,JS的token其实也只有八种:
英文名 | 名称 | 简述 | 示例 |
---|---|---|---|
Token | 词法标记 | 一切JS中有实际意义的词法标记 | |
┣IdentifierName | 标识名称 | 以字母或_或$开始的一个单词,可以用于属性名 | abc |
┃┣Identifier | 标识符 | 非保留字的IdentifierName,可以用于变量名或者属性名 |
abc |
┃┣Keyword | 关键字 | 有特殊语法意义的IdentifierName |
while |
┃┣NullLiteral | Null直接量 | 表示一个Null类型的值 |
null |
┃┗BooleanLiteral | 布尔直接量 | 表示一个Boolean类型的值 |
true |
┣Punctuator | 标点符号 | 表示特殊意义的标点符号 |
* |
┣NumericLiteral | 数字直接量 | 表示一个Number类型的值 |
.12e-10 |
┣StringLiteral | 字符串直接量 | 表示一个String类型的值 |
"Hello world!" |
┗RegularExpressionLiteral | 正则表达式直接量 | 表示一个RegularExpression类的对象 |
/[a-z]+$$/g |
这些token基本就是全部词法了,由它们之间的组合,可以组成表达式、语句、函数定义等语法结构,最终形成有强大表达能力的程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库