javascript基础语法——词法结构

面前的言语

  javascript是同等派简单的语言,也是平宗复杂的语言。说其概括,是盖学会以它独自需要片刻功力;而说她复杂,是以若真控制其则用反复年日。实际上,前端工程师很怪程度上即是指javascript工程师。前端入门容易精通难,说的是前者,更据的凡javascript。本文是javascript基础语法的第一首——词法结构。词法结构是千篇一律仿照基础性规则,用来叙述如何行使javascript来编写程序

 

与java关系

  关于javascript有诸如此类一个说法,java以及javascript的关联是雷锋和雷锋塔的涉。那到底发生没有发关系为

  javascript最开头之讳是LiveScript,后来择javascript作为那个专业名称的来头,大概是想给她放任起来有系出名门的感觉。除了语法看起和java类似之外,javascript和java是意不同的简单种编程语言

  程序设计语言分为解释型和编译型两好接近。java或C++等语言需要一个编译器。编译器是均等种次,能够管用java等高档语言编写出来的源代码翻译啊直接当处理器及实施之公文。解释型程序设计语言不需编译器——它们才用解释器,浏览器被之javascript解释器将直接读入源代码并推行

  java于理论及几乎可以配备于另条件,但javascript却倾向被仅仅使在web浏览器。而且,在javascript语言中,函数是同一种独立的数据类型,采用基于原型对象(prototype)的继承链,javascript语法要比Java自由得差不多

  基本上,JavaScript这个名字的本心是“很像Java的脚本语言”

 

定义

  javascript是如出一辙派别动态的、弱类型的解释型编程语言,非常适合面向对象和函数式的编程风格。javascript的语法源自java,它的一等函数出自scheme,它的根据原型的持续来self

  javascript用来增进页面动态效果,实现页面及用户之间的实时、动态交互

  javascript由三片段构成:ECMAScript、DOM和BOM

  [1]ECMAScript由ECMA-262定义,提供基本语言功能(ECMA是欧洲计算机制造商协会)

  [2]DOM(Document Object
Model)文档对象模型,提供访问与操作网页内容的方式与接口

  [3]BOM(Browser Object
Model)浏览器对象模型,提供以及浏览器交互的点子与接口

 

大小写敏感

  关于javascript这门语言,再怎么强调还未呢过之特征是深浅写敏感。javascript中之要字、变量、函数叫作以及持有的标识符都必须用平等的大小写形式

//'online'、'Online'、'OnLine'、'ONLINE'是四个不同的变量名

  [注意]HTML并无区分轻重缓急写(尽管XHTML区分轻重缓急写)。许多客户端javascript对象与性与它们表示的HTML标签和性质同名。在HTML中,这些标签以及属性名好使大写也得下小写,而当javascript中尽管要是稍微写。例如,在HTML中装置事件处理程序时,onclick属性可以形容成onClick,但以javascript代码中,必须用小写的onclick

 

保留字(ReservedWord)

  和外任何编程语言同样,javascript保留了一些标识符呢协调所用。这些保留字不能够因此做普通的标识符。由于过多参考书的误导,貌似保留字和要字是分手的,其实并无是,关键字只是保留字的平片段。保留字包括要字、未来保留字、空字面量和布尔值字面量

保留字 ReservedWord ::
   Keyword
   FutureReservedWord
   NullLiteral
   BooleanLiteral

关键字

    break      do         instanceof        typeof
    case       else       new               var
    catch      finally    return            void
    continue   for        switch            while
    debugger   function   this              with
    default    if         throw             delete
    in         try

前途保留字

  下列词让看成建议扩大关键字,因此保留,以便未来恐怕使这些扩展

    class      enum       extends       super
    const      export     import

ECMAScript3版本

  以上是ECMAScript5之保留字,但每当ECMAScript3本子中的保留字并无一致,若想代码能在基于ECMAScript3实现的解释器上运行以来,应该避免下以下保留字作为标识符

abstract boolean byte char class constdouble enum export extends final float
goto implements import int interfacelong native package private protected
public short  static super synchronized throw transient volatile 

预定义变量和函数

  此外,javascript预定义了很多全局变量和函数,应该避免将它们的名用做标识符名

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

 

注释(Comment)

  不是具语句都亟待javascript解释器去解释并履行。有时要在剧本中形容一些单供自己参考或提拔自己之音讯,并要javascript解释器能直接忽略掉这些消息,这类消息就是是注释

  注释能管用帮助了解代码流程,在代码中它扮演生活备受便长的角色,可以拉我们抓明白脚本到底干了啊

  [注意]注一定要是标准地叙述代码,没有用之注释比没注释还要坏

  有强道得以在javascript脚论被插入注释,包括单行注释、多尽注释和HTML风格的笺注

【1】单行注释以有限只斜杠开头

//单行注释

【2】多行注释又给块级注释,以一个斜杠和一个星号/*开,以一个星号和一个斜杠*/结尾

/*
    这是一个多行注释
 */

  [注意]块级注释/**/可以跨行书写,但非克嵌套,否则会报错

//报错
/*
注释1
/*
注释1.1
 */
 */

  [注意]块级注释/**/中之那些字符也恐怕出现在正则表达式字面量里,所以块级注释对于被诠释的代码块吧是勿安全的

/*
    var rm_a = /a*/.match(s);
*/

【3】HTML风格的注释仅仅适用于单行注释,其实javascript解释器对<!–的处理和对//的拍卖是一样的

<!-- 这是javascript中的注释

  如果以HTML文档中,还亟需盖–>来结束注释

<!-- 这是HTML中的注释 -->

  但javascript不要求这么做,它会拿–>视为注释内容之均等片

  [注意]HTML允许地方这样的笺注跨越多尽,但这种注释的每行都须于开始加上”<!–“来作为标志

<!-- 我是注释1
<!-- 我是注释2
<!-- 我是注释3

  因为javascript解释器在拍卖这种作风的笺注时和HTML做法各异,为免起混淆,最好不要当javascript脚论被采取HTML风格的笺注

 

空白(WhiteSpace)

  空白通常没有意义,有时候要使就此它们来分隔字符序列,否则其就会叫统一成为一个标记

var that = this;

  var和that之间的空是无能够移除的,但另外的空白可以移除

  javascript会忽略程序中标识(token)之间的空格。多数情下,javascript同样会忽视换行符。由于足于代码中擅自动用空格和换行,因此可以整齐、一致的缩进来形成统一之编码风格,从而加强代码的可读性

//通过增加空白字符,提高代码可读性
for(var i = 1; i < 10; i++){
    //
}

  javascript将如下这些分辨为空白字符WhiteSpace

\u0009    水平制表符         <TAB>
\u000B    垂直制表符         <VT>
\u000C    换页符            <FF>
\u0020    空格符            <SP>
\u00A0    非中断空格符       <NBSP>
\uFEFF    字符序标记

  javascript将如下字符识别为行终止符LineTerminator

\u000A    换行符        <LF>
\u000D    回车符        <CR>
\u2028    行分隔符      <LS>
\u2029    段落分割符     <PS>

 

而选的分公司

  javascript以分号;将告诉词分隔开,这对加强代码的可读性和整洁性是好主要之

  有些地方可以简简单单分号,有些地方虽然非能够看略分号

//两条语句用两行书写,第一个分号可以省略
a = 3;
b = 4;
//两条语句用一行书写,第一个分号不能省略
a = 3; b = 4;

  但javascript并无是于颇具换行处都加分号,只有在缺乏了分公司就无法正确分析代码时,javascript才会补分号。换句话说,如果手上谈和随之的非空格字符不能够算作一个整来分析的话语,javascript就当目前告诉句行结束处上分号

var a
a
=
3
console.log(a)

  javascript将那个分析为:

var a;
a = 3;
console.log(a);

  这种话的相间规则会导致有些想不到的状态

var y = x + f
(a+b).toString

  javascript将那分析为:

var y = x + f(a+b).toString

  因此,为了能够吃上述代码解析成稀漫漫不同的言辞,必须手动填入行尾的显式分号

  通常来讲,如果同久告词以'(‘、'[‘、’/’、’+’、’-‘等标志开始,那么她最好生或与前一条语句合一起分析

少数个不同

  如果手上讲话和下一行语句无法统一解析,javascript会在率先履后补偿分号,这是通用规则,但产生有限个不等

  【1】第一独不等是事关return、break、continue、throw语句的景被。如果立刻四只根本字后从换行,javascript会当换行处填补分号

return
true;

  javascript将那个分析为:

return;true;

  而代码的本心是:

return true;

  【2】第二独不等是当关乎++和–运算符时,如果以那个当后缀表达式,它同表达式应该与一行。否则,行尾将填补分号,同时++或–将作为下一行代码的前缀操作符并与的一起分析

x
++
y

  javascript将那个分析为:

x;++y;

  而代码的本意是:

x++;y;

  虽然分号不是必须的,但最不用简单它,因为加上分号可以免多错误,代码行结尾处没有分号会导致减少错误。加上分号也会于一些情况下加强代码的性,因为如此解析器就无须再花时间测算该于哪插入分号了

 

参考资料

【1】 ES5/词法 https://www.w3.org/html/ig/zh/wiki/ES5/lexical
【2】 阮一峰Javascript标准参照教程——语法概述
http://javascript.ruanyifeng.com/grammar/basic.html
【3】 W3School-Javascript高级教程——ECMAScript语法
http://www.w3school.com.cn/js/pro\_js\_syntax.asp
【4】《javascript权威指南(第6版本)》第2段 词法结构
【5】《javascript高级程序设计(第3版)》第3节 基本概念
【6】《javascript语言精粹(修订版)》第2章节 语法
【7】《javascript DOM编程艺术(第2版本)》第2节 Javascript语法