深究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常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'