前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >javascript入门到进阶 - javascript词法文法

javascript入门到进阶 - javascript词法文法

作者头像
公众号---人生代码
发布于 2020-07-14 03:05:28
发布于 2020-07-14 03:05:28
77600
代码可运行
举报
文章被收录于专栏:人生代码人生代码
运行总次数:0
代码可运行

「javascript词法文法学习篇」

这部分描述了JavaScript的词法。ECMAScript源码文本会被从左到右扫描,并被转换为一系列的输入元素,包括tokens、控制符、行终止符、注释和空白符。ECMAScript定义了一些关键字、字面量以及行尾分号补全的规则。

「注释」

注释用来在源码中增加提示、笔记、建议、警告等信息,可以帮助阅读和理解源码。在调试时,可以用来将一段代码屏蔽掉,防止其运行。

JavaScript中有两种生成注释的方法。

第一种是单行注释 (single-line comment),使用//,会将该行中符号以后的文本都视为注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function comment() {
  // 这是行注释
  console.log("Hello world!");
}
comment();

第二种是多行注释 (multiple-line comment),使用/* */ ,这种方式更加灵活:

比如,可以使用多行注释来实现单行注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function comment() {
  /* 单行注释 */
  console.log("Hello world!");
}
comment();

也可以用来实现多行注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function comment() {
  /* 多行注释,
     直到终止符号才结束 */
  console.log("Hello world!");
}
comment();

多行注释也可以用于单行间注释,这样会造成代码可读性变差,所以要谨慎使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function comment(x) {
  console.log("Hello " + x /* 引入x的值 */ + " !");
}
comment("world");

另外,块注释也可以用来屏蔽一段代码,只要将这段代码用块注释包裹起来就可以了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function comment() {
  /* console.log("Hello world!"); */
}
comment();

注释中的console.log()的调用始终无效。这种方式可以屏蔽任意多行的代码。

「保留字的使用」事实上保留字是仅针对标识符(Identifier)的文法定义而言的(而非标识符名(IdentifierName)的文法定义). 如 es5.github.com/#A.1中所描述的, 这些都是不排斥保留字的标识符名.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a.import
a["import"]
a = { import: "test" }.

另一方面,如下用法是不允许的。因为它是一个标识符,而标识符的文法定义是除保留字以外的标识符名。标识符用于函数声明式和函数表达式.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function import() {} // Illegal.

「直接量」「空直接量」更多信息可以参考null

null「布尔直接量」更多信息可以参考Boolean

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true
false

「数值直接量」十进制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1234567890
42

// 谨慎使用0开头的数值

0888 // 转换为十进制888
0777 // 转换为八进制777,十进制511

请注意,十进制数值直接量可以以0开头,但是如果0以后的最高位比8小,数值将会被认为是八进制而不会报错。更多信息可以参考bug 957513和parseInt()。

「二进制」二进制表示为开头是0后接大写或小写的B(0b或者0B)。这是ECMAScript 6中的新语法,可以参考下面的浏览器兼容性表格。如果0b之后有除了0或1以外的数字,将会抛出SyntaxError:“Missing binary digits after 0b”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607

「八进制」八进制表示为开头是0后接大写或小写的O(0o或0O)。这是ECMAScript 6中的新语法,可以参考下面的浏览器兼容性表格。如果有不在(01234567)中的数字,将会抛出SyntaxError:“Missing octal digits after 0o”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var n = 0O755; // 493
var m = 0o644; // 420

// 用0开头也可以实现(请查看上方十进制有关部分)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0755
0644

「十六进制」十六进制表示为开头是0后接大写或小写的X(0x或0X)。如果有不在(0123456789ABCDEF)中的数字,将会抛出SyntaxError:“Identifier starts immediately after numeric literal”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10

「对象直接量」更多信息可以参考Object和对象初始化器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var o = { a: "foo", b: "bar", c: 42 };

// ES6中的简略表示方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = "foo", b = "bar", c = 42;
var o = {a, b, c};
// 不需要这样
var o = { a: a, b: b, c: c };

「数组直接量」更多信息可以参考Array。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1954, 1974, 1990, 2014]

「字符串直接量」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'foo'
"bar"
十六进制转义序列
'\xA9' // "©"
Unicode转义序列
Unicode转义序列要求在\u之后至少有四个字符。

'\u00A9' // "©"

「Unicode编码转义」ECMAScript 6新增特性。使用Unicode编码转义,任何字符都可以被转义为十六进制编码。最高可以用到0x10FFFF。使用单纯的Unicode转义通常需要写成分开的两半以达到相同的效果。

可以参考String.fromCodePoint()和String.prototype.codePointAt()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'\u{2F804}'

// 使用单纯Unicode转义
'\uD87E\uDC04'
正则表达式直接量节
更多信息可以参考RegExp。

/ab+c/g

// 一个空的正则表达式直接量
// 必须有一个空的非捕获分组
// 以避免被当成是行注释符号
/(?:)/

「模板直接量」更多信息可以参考template strings。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`string text`

`string text line 1
 string text line 2`

`string text ${expression} string text`

tag `string text ${expression} string text`

「自动分号补全」一些JavaScript语句必须用分号结束,所以会被自动分号补全 (ASI)影响:

空语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
letconst、变量声明
importexport、模块定义
表达式语句
debugger
continuebreakthrow
return
ECMAScript规格提到自动分号补全的三个规则。

当出现一个不允许的行终止符或“}”时,会在其之前插入一个分号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

{ 1 2 } 3 

// 将会被ASI转换为 

{ 1 2 ;} 3;

当捕获到标识符输入流的结尾,并且无法将单个输入流转换为一个完整的程序时,将在结尾插入一个分号。

在下面这段中,由于在b和++之间出现了一个行终止符,所以++未被当成变量b的后置运算符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = b
++c

// 将被ASI转换为

a = b;
++c;

当语句中包含语法中的限制产品后跟一个行终止符的时候,将会在结尾插入一个分号。带“这里没有行终止符”规则的语句有:

后置运算符(++和--)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
continue
break
return
yield, yield*
module
return
a + b

// 将被ASI转换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return;
a + b;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript词法:为什么12.toString会报错?
在前面的文章中,我们已经从运行时的角度了解过 JavaScript 的知识内容,在接下来的几节课,我们来了解一下 JavaScript 的文法部分。
越陌度阡
2022/05/18
9290
JavaScript词法:为什么12.toString会报错?
JavaScript基本词法
JavaScript 语法就是指构成合法的 JavaScript 程序的所有规则和特征的集合,包括词法和句法。简单描述如下: 词法定义了 JavaScript的基本名词规范,包括字符编码、命名规则、标识符、关键字、注释规则、 运算符和分隔符等。 句法定义了 JavaScript的基本运算逻辑和程序结构,包括短语、句子和代码段的基本规则,如表达式、语句和程序结构等。
用户3519280
2023/07/07
2400
javascript入门到进阶 - javascript基础
JavaScript 是区分大小写的,并使用 Unicode 字符集。举个例子,可以将单词 Früh (在德语中意思是“早”)用作变量名。
公众号---人生代码
2020/07/14
6950
JavaScript(二)
ECMAScript 中的一切(标识符,操作符)都是区分大小写的,即大小写敏感的语言。 如: 变量 test 和变量 Test 分别表示两个变量。
1ess
2021/10/29
5590
「JavaScript」编程基础-01
请注意,本文编写于 2102 天前,最后修改于 174 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
5380
「JavaScript」编程基础-01
JSON5 格式标准 Data Exchange Format 官方文档 中英双语
The JSON5 Data Interchange Format is a proposed extension to JSON that aims to make it easier for humans to write and maintain by hand. It does this by adding some minimal syntax features directly from ECMAScript 5.1.JSON5 数据交换格式是一个提议的 JSON 扩展,旨在通过直接添加一些来自 ECMAScript 5.1 的最小语法特性,使人类更容易手动编写和维护。
WTSolutions
2025/03/30
1120
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
ECMAScript(通常称为 JavaScript)是一种经历了许多波折的脚本语言。它最初是为了实现 Netscape Navigator(第一批 Web 浏览器之一)的可扩展性而创建的。JavaScript 最初的命名考虑到了与 Java 的关联(Java 那时正迅速发展成为一种重要语言),多年来,它一直被视为两种语言中的次要语言。
疯狂的技术宅
2019/03/28
9090
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
Python常识
一、强类型语言与弱类型语言 1、强类型语言 强类型语言是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。例如:java、.NET、C++ 2、弱类型语言 某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。例如:vb 、PHP、javascript、Python 二、Python注释 1、# 单行注释 例 # 你好 2、''' 或者""" 用于多行注释 例 ''' import os hello world ''' 或 """ import os hello world """ 三、Python代码规范 1、每个 import 语句一次只导入一个模块 import os import sys #正确 import os,sys #错误 2、不要在行尾添加分号 import os; #错误 import os #正确 3、每行建议不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来 s=("C语言中文网是中国领先的C语言程序设计专业网站," "提供C语言入门经典教程、C语言编译器、C语言函数手册等。") 4、在运算符两侧、函数参数之间以及逗号两侧,建议使用空格进行分隔 四、Python标识符 标识符就是一个名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。 1、标识符是由字符、下划线和数字组成,但第一个字符不能是数字。 2、标识符不能和 Python 中的保留字相同。 3、标识符中,不能包含空格、@、% 以及 $ 等特殊字符。 4、标识符中的字母是严格区分大小写的 5、以下划线开头的标识符有特殊含义,非特定场景需要,应避免使用以下划线开头的标识符 例如: 1)、以单下划线开头的标识符(如_width),表示不能直接访问的类属性,其 无法通过 from...import 的方式导入; 2)、以双下划线开头的标识符(如 __add)表示类的私有成员;
py3study
2020/01/10
9020
【尚硅谷】JavaScript基础&实战丨JS入门到精通_01-06
(3)可以将js代码编写到外部js文件中,然后通过script标签引入(☆☆☆) 优点:写到外部文件中可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制。 注意:script标签一旦用于引入外部文件了,就不能在编写代码了,即使编写了浏览器也会忽略 如果需要则可以在创建一个新的script标签用于编写内部代码。
全栈程序员站长
2022/11/01
7020
《JavaScript高级程序设计(第四版)》学习笔记(二)第3章
最开始采用 var、在 ES6 后更多的采用let、const关键字,它们的不同在后面会写到
小丞同学
2021/08/16
1.2K0
IT课程 JavaScript基础 036_语法结构
在JavaScript中,分号(;)是语句结束符号,用于标识语句的结束。分号在大多数情况下是可选的,因为JavaScript解释器会尝试自动插入分号(Automatic Semicolon Insertion,ASI),以使代码解析为语法正确。然而,存在一些情况下,ASI 可能会导致不符合预期的行为,因此建议在编写 JavaScript 代码时显式添加分号。
zhaoJian.Net
2024/04/03
1240
IT课程 JavaScript基础 036_语法结构
大话 JavaScript(Speaking JavaScript):第六章到第十章
JavaScript 花了很长时间才产生影响。许多与 JavaScript 相关的技术存在了一段时间,直到它们被主流发现。本节描述了从 JavaScript 的创建到今天发生的事情。在整个过程中,只提到了最受欢迎的项目,而忽略了许多项目,即使它们是第一个。例如,列出了 Dojo Toolkit,但也有较少人知道的qooxdoo,它是在同一时间创建的。还列出了 Node.js,尽管Jaxer在它之前就存在:
ApacheCN_飞龙
2024/01/12
4290
JavaScript基础
一个页面分成三个部分,结构,样式,行为。 HTML代表了页面的结构(骨架),CSS代表了页面的样式(皮肤),JavaScript代表了页面的行为(这种行为是被动的)。主动的行为需要一个大脑,后端作为我
王小婷
2018/06/01
5390
词汇结构
M文档是 Unicode 字符的有序序列。M 允许在 M 文档的不同部分使用不同类别的 Unicode 字符。有关 Unicode 字符类的信息,请参阅The Unicode Standard, Version 3.0 , section 4.5。
冬夜先生
2022/01/04
1.2K0
JavaScript 权威指南第七版(GPT 重译)(一)
本书涵盖了 JavaScript 语言以及 Web 浏览器和 Node 实现的 JavaScript API。我为一些具有先前编程经验的读者编写了这本书,他们想要学习 JavaScript,也为已经使用 JavaScript 的程序员编写了这本书,但希望将他们的理解提升到一个新的水平,并真正掌握这门语言。我写这本书的目标是全面和权威地记录 JavaScript 语言,并深入介绍 JavaScript 程序可用的最重要的客户端和服务器端 API。因此,这是一本长篇详细的书。然而,我希望它会奖励仔细学习,并且您花在阅读上的时间将很容易以更高的编程生产力形式收回。
ApacheCN_飞龙
2024/03/23
9590
JavaScript 权威指南第七版(GPT 重译)(一)
JavaScript-语法、关键保留字及变量
在 ECMAScript 第 3 版中,像数组字面量和对象字面量的表达式也是支持的,如下:
小小工匠
2021/08/17
3240
JavaScript的语法
JavaScript作为一门语言,本身有属于自己的语法,词法,句法的而要求,并且和Java等高级编程一样,也有属于自己的流程控制等操作。
小小鱼儿小小林
2020/06/24
6310
一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数
JavaScript有多重要啊,才能让我说说一下,其中的语法,操作符,数据类型,内置功能等。
达达前端
2019/12/26
5640
一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数
Python 基础篇(二)
整数的进制 进制 基本数 逢几进一 表示形式 十进制 0,1,2,3,4,5,6,7,8,9 10 118 二进制 0,1 2 0b1110110 八进制 0,1,2,3,4,5,6,7 8 0o166 十六进制 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16 0x76
用户9615083
2022/12/25
2930
Python 基础篇(二)
Python学习
在命令行窗口中启动的Python解释器中实现 在Python自带的IDLE中实现
青灯古酒
2023/10/16
1920
相关推荐
JavaScript词法:为什么12.toString会报错?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验