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

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1