• JavaScript权威指南--词法结构


    使用广泛,所有的浏览器(桌面、手机、屏蔽等等)都配有相应的JavaScript解析器。

    JavaScript解析器如何工作?

    浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作。

    1、“找一些东西”: var、 function、 参数;(也被称之为预解析)

    备注:如果遇到重名分为以下两种情况:遇到变量和函数重名了,只留下函数;遇到函数重名了,根据代码的上下文顺序,留下最后一个。

    2、逐行解读代码。

    备注:表达式可以修改预解析的值

    JS解析器在执行第一步预解析的时候,会从代码的开始搜索直到结尾,只去查找var、function和参数等内容。一般把第一步称之为“JavaScript的预解析”。而且,当找到这些内容时,所有的变量,在正式运行代码之前,都提前赋了一个值:未定义;所有的函数,在正式运行代码之前,都是整个函数块。

    三技能:JavaScript、HTML、CSS。

    JavaScript早已超出了其“脚本语言”本身的范畴,而成为一种集健壮性/高效性和通用性为一身的编程语言。

    编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了诸如变量名是什么样的、怎么写注释,以及程序语句之间如何分割的等规则。

    1.字符集

    JavaScript程序是用Unicode字符集编写的。Unicode是ASCII和Latin-l的超集,并支持地球上几乎所有在用的语言。ECMAScript 3要求JS的实现必须支持Unicode2.1以及后续版本,ECMAScript5则要求支持Uniocde 3及以后版本。

    Unicode与JavaScript详解

    1.1.区分大小写

    JS是区分大小写的语言。也就是说、关键字、变量、函数名和所有的标识符都必须采取一致的大小写形式。

    注意:HTML不区分大小写、XHTML区分。

    例如:在HTML中设置事件处理程序时,onclick属性可以写成OnClick,但在JS代码(或者在XHTML文档)中,必须使用小写的onclick.

    1.2、空格、换行符、格式控制符

    JS会忽略程序中的标识之间的空格.多数情况下,JS同样会忽略换行符.由于可以在代码中随意使用空格和换行,因此可以采用整齐,一致的缩进来形成统一的编码风格,从而提高代码的可读性.

    除了可以识别普通的空格符(u0020),JavaScript还可以识别如下这些表示空格的字符:水平制表符(u0009)、垂直制表符(u000B)、换页符(u000C)、不中断空白 (u00A0)、字节序标记 (uFEFF),以及在Unicode中所有Zs类别的字符。JavaScript将如下字符识别为行结束符:换行符(u000A),回车符(u000D),行分隔符(u2028),段分隔符(u2029)。回车符加换行符在一起被解析为一个单行结束符。

    Unicode格式控制字符,比如“从右至左书写标记”(u200F)和“从左至右书写标记”(u200E),控制着文本的视觉显示,这对于一些非英语文本的正确显示来说是至关重要的,这些字符可以用在JavaScirpt的注释、字符串直接量和正则表达式直接量中,但不能用在标识符(比如,变量名)中。但有个例外,零宽连接符(u200D)和零宽非连接符(uFEFF)译注6是可以出现在标识符中的,但不能作为标识符的首字符。上文也提到了,字节序标记格式控制符(uFEFF)被当成了空格来对待。

    JavaScript中表示空格的字符

    1.3.Unicode转义序列

    在有些计算机硬件和软件里,无法显示或输入Unicode字符全集(比如:é)。为了支持那些使用老旧技术的程序员,JS定义了一种特殊序列,使用6个ASCII字符来代表任意16位Uniocde内码.这些Uniocde转义序列均以u为前缀,其后跟随4个十六进制数(使用数字以及大写或小写的字母A~F表示).这种Unicode转义写法可以用JS字符串直接量,正则表达式直接量和标识符中(关键字除外).例如,字符é的Unicode转义写法为u00E9,如下两个JavaScript字符串是完全一样的:

    "café" === "cafu00e9" // => true 

    Unicode转义写法也可以出现在注释中,但由于JavaScript会将注释忽略,它们只是被当成上下文中的ASCII字符处理,而且并不会被解析为其对应的Unicode字符。

    但我们应该注意一点,Unicode是允许多种方法对同一字符进行编码的,用上述的é转义的例子来说明:

    • 可以使用Unicode字符u00E9表示
    • 亦可用eu0301(语调字符)表示

    假如用这两个Unicode转义字符进行比较,计算机得出的结果反而不相同:

    “u00E9”===“eu0301”  //false

    比较facé与café中的é是否相同?

    facé与café中的é都转化为u00E9或者都转化为eu0301,才能比较facé与café中的é是否相同

    1.4.标准化

    Unicode标准

    Unicode允许使用多种方法对同一个字符进行编码。

    2.注释

    "//":单行注释

    "/*......*/":多行注释,不能嵌套。

    3.直接量

    程序中直接使用的数据值

    4.标识符和保留字

    标识符:一个名字而已,用来对变量和函数进行命名,或者循环语句中跳转的标志。

    以字母、下划线、美元符开始,不能用数字开头。

    保留字(关键字):保留一些标识符给自己用。

    5.可选的分号

    程序能识别的,分号可用可不用;无法识别的,分号必须用。

    需要注意的是:return、break和continue语句的场景中,如果换行的话也会自动在换行处添加分号;同时“++”和“--”,如果是作为后缀的话,则必须在同一行

  • 相关阅读:
    每个zone的low memory是怎么计算出来的
    /proc/meminfo中meminfo的计算方法
    shmem:
    tc:逼良为娼
    内核抢占
    html/css/javascript知识点集锦;完全小白开搞web编程
    netem设置了网卡的流量控制,为啥发包的延迟就搞不定呢?
    滑动窗口
    发送缓冲区sk_wmem_queued
    ASP.NET MVC 实现区域 项目分离 (比较好的方式)
  • 原文地址:https://www.cnblogs.com/Chen-XiaoJun/p/6476974.html
Copyright © 2020-2023  润新知