深究js(一)——词法结构

2024-03-15 16:48
文章标签 js 结构 词法 深究

本文主要是介绍深究js(一)——词法结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.字符集

    首先要介绍的是JavaScript的字符集。JavaScript是用Unicode字符集编写的,Unicode是ASCII和Latin-1的超集,并且支持地球上所有在用的语言。在ECMAScript3中,要求JavaScript的实现必须支持Unicode2.1及后续的版本,ECMAScript5则要求支持Unicode3及后续版本。


2.区分大小写

    在JavaScript中是区分大小写的,在JavaScript中,变量a和A虽然是同一个字母,但是大小写不同,所以是不同的两个变量。但是在HTML中,是不区分大小写的,比如说onclick在HTML中可以写成ONCLICK或者onClick,但是在JavaScript中则必须小写。换句话说在HTML的标签和属性用JavaScript来写的话必须小写。值得一提的是,在XHTML中是区分大小写的,但由于浏览器有强大的纠错功能,即使文档中包含很多不严格的大小写,浏览器还是比较宽容的解析渲染。


3.注释

    注释类似Java和c++,分为‘//’或者‘/**/’,了解编程的朋友应该知道怎么用,不多解释。


4.直接量

    所谓直接量,就是在程序中直接使用的数据值。如下所示:

1               //数字
1.2             //小数
"hello"         //字符串
'hello'         //字符串
true            //布尔值
false           //布尔值
/javasrcipt/    //正则表达式
null            //{x:1}           //对象
[1,2,3]         //数组

5.标识符和保留字

    在JavaScript中,标识符是用来对变量和函数进行命名的,或者用做JavaScript代码中某些循环语句中的跳转位置的标记。JavaScript标识符必须以字母、下划线(_)或美元符号($)为首,后续的可以是上述的那三个再加数字,但是数字不能为首字符。除了可以用ASCII字母和数字来书写标识符,我们也可以用Unicode字符来书写标识符。如:

var = 'glasses'
alert()

输出的结果是glasses

    不过,我们并不能取任意名字作为标识符,因为在JavaScript中,有保留字,这些保留字作为JavaScript的关键字来使用,所以起名的时候不能起保留字为标识符。常见的JavaScript的保留字有:

 
break	    delete	 function        return        typeof
case        do           if	         switch        var
catch       else         in              this          void
continue    false        instanceof      throw         while
debugger    finally      new             true          with
default     for          null            try
在ECMAScript5中保留了如下关键字:

class       const        enum            export        extends
import      super

此外虽然有一些在JavaScript中是合法的但是在严格模式下是保留字的有:

implements  let          private         public        yield
interface   package      protected       static        arguments
eval
在ECMAScript3中,将Java的所有关键字都列为自己的关键字,尽管在ECMAScript5中放宽了限制,但是如果想要基于ECMAScript3实现的解释器运行的话,还是尽量避免使用如下的关键字:

abstract    double       goto            native        static
boolean     enum         implements      package       super
byte        export       import          private       synchronized
char        extends      int             protected     throws
class       final        interface       public        transient
const       float        long            short         volatile
JavaScript预定义了很多全局变量和函数,应当避免把它们的名字用做变量名和函数名:

arguments   encodeURI    Infinity        Number        RegExp
Array       encodeURIComponent           isFinite      Object
String      Boolean      Error           isNaN         parseFloat
SyntaxError Date         eval            JSON          parseInt
TypeError   decodeURI    EvalError       Math          RangeError
underfined  decodeURIComponent           Function      NaN
ReferenceError           URIError

6.分号

    分号用来将语句隔开,在JavaScript中,如果语句各自独占一行,则可以省略之间的分号,JavaScript它会自动的填补分号。值得注意的是,JavaScript并不是在所有换行处都填补了分号,只有在缺少了分号就无法正确解析代码的时候才会填补分号。如下例子:

var a
a
=
3
console.log(a)
系统会解析为:

var a; a = 3; console.log(a);
如果是下面这个例子的话:

var y = x + f
(a + b).toString()
本来想着这是两条语句,但是在JavaScript的内部却是解析为:

var y = x + f(a + b).toString();
通常来讲,如果一条语句以‘(’、‘[’、‘/’,‘+’,‘-’开始的话,那么极有可能和前一条语句合在一起解析,所以这个时候就需要一个分号。

在JavaScript中,如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则,但是有两个例外。第一个是涉及到return、break和continue语句。如:

return
true;
在JavaScript中会解析为一条两条语句:

return; true;
但是本意是想一条语句:

return true;
也就是说,在return、break和continue和随后的表达式之间不能有换行。

第二种例外就是‘++’和‘--’。这些运算符可以作为表达式的前缀,也可以当做表达式的后缀。如果将其用做后缀表达式,它和表达式应当在同一行,否则行尾将填补分号。同时‘++’或‘--’将会作为下一行代码的前缀操作符并与之一起解析。如:

x
++
y
这段代码会解析为:

x;++y
而不是:

x++;y

本内容参考《JavaScript权威指南》,如有漏洞,望不吝赐教,谢谢。

这篇关于深究js(一)——词法结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812615

相关文章

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2