深究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

相关文章

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

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的