《JavaScript 闯关记》之语法

JavaScript 的语法大量借鉴了 C 及其他类 C 语言(如 Java 和
Perl)的语法。因此,熟悉这些语言的开发人员在经受 JavaScript
更加宽松的语法时,一定会起种植轻松自在的觉得。本章主要按 ECMAScript 3
介绍这门语言的基本概念,并就 ECMAScript 5 的变化让闹证明。

字符集

JavaScript 程序是因此 Unicode 字符集编写的,Unicode 是 ASCII 和 Latin-1
的超集,并支持地球上几乎拥有在用的言语。ECMAScript 3 要求 JavaScript
的落实必须支持 Unicode 2.1同后续版本,ECMAScript 5 则要求支持 Unicode
3及后续版本。

扩张阅读「Unicode 与 JavaScript 详解」
http://www.ruanyifeng.com/blog/2014/12/unicode.html

别轻重缓急写

JavaScript
是分别轻重缓急写的。也就是说,关键字、变量、函数叫作和有着的标识符(identifier)都得动一样的深浅写形式。比如,关键字
while 必须写成 while,而不能够写成 While 或者
WHILE。同样,onlineOnlineOnLineONLINE
是4独例外的变量名。

只是需专注的是,HTML 并无区分轻重缓急写。由于她同客户端 JavaScript
联系紧密,因此就点分别很爱混淆视听。许多客户端 JavaScript
对象与性质和他们所表示的 HTML 标签及特性名相同。在 HTML
中,这些标签和性能名好采用大写也堪是微写,而于 JavaScript
中虽要是聊写。例如,在 HTML 中安事件处理程序时,onclick
属性可以形容成 onClick,但于 JavaScript 代码中,必须采用小写的
onclick

注释

JavaScript 使用 C 风格的注释,包括单行注释和块级注释。单行注释以有限独斜杠
// 开头,块级注释以一个斜杠和一个星号 /* 开头,以一个星号和一个斜杠
*/ 结尾。下面还是官的 JavaScript 注释:

// 这里是单行注释

/*
 *  这里是块级注释
 *  也叫多行注释
 */

则上面注释中之亚及老三实施都归因于一个星号开头,但这不是须的,纯粹是为加强注释的可读性(这种格式在店铺级以中极其普遍)。

字面量

所谓字面量(也可称直接量,Literal
values),就是先后中直接下的数据值。字面量只表示自身,不存储在特定岗位。JavaScript
中之字面量有:字符串、数字、布尔值、对象、数组、函数、正则表达式,以及特种的
null 值。

"hello world"   // 字符串
123             // 数字
1.2             // 小数
true            // 布尔值
false           // 布尔值
/javascript/gi  // 正则表达式
null            // 空
{ name: 'stone', age: 20}       // 对象
[ 1, 2, 3, 4, 5, 6, 7, 8 ]      // 数组
function(){ console.log('good'); }    // 函数

扩大阅读「undefined不是配面量」
http://www.cnblogs.com/ziyunfei/archive/2012/11/11/2765096.html

严加模式

在 ECMAScript 5 引入了适度从紧模式(strict mode)的概念。严格模式是为
JavaScript 定义了千篇一律栽不同之解析及履行模式。在严格模式下,ECMAScript 3
中之有些非确定的所作所为拿获得处理,而且本着少数不安全之操作为会见弃来错误。要于任何脚本中启用严格模式,可以当顶部增长如下代码:

"use strict";

当下行代码看起如是字符串,而且也从来不赋值给任何变量,但实际上它是一个编译指示(pragma),用于告诉支持的
JavaScript 引擎切换到严格模式。这是为不破坏 ECMAScript 3
语法而特别选定的语法。

以函数内部的率先行包含这漫长编译指示,也足以指定函数在严厉模式下实行:

function doSomething(){
    "use strict"; 
    // 函数体
}

严酷模式下,JavaScript
的施行结果会发出深十分异,因此依课程会时时指出严格模式下的分别。

标识符

所谓标识符,就是依赖变量、函数、属性之讳,或者函数的参数。JavaScript
标识符必须盖字母、下划线(_)或美元符号($)开始,后续的字符可以是字母、数字、下划线或美元符号(数字是勿容许作为首字符出现的)。下面是官的标识符:

my_variable_name, v12345, _dummy, $str888

标识符中的假名可以分包扩展的 ASCII 或 Unicode 字母字符(如 π
),但未引进这样做。按照惯例,JavaScript
标识符采用驼峰大小写格式,也便是率先独字母小写,剩下的每个有含义之只词的首字母大写,例如:

firstSecond, myCar, doSomethingImportant

主要字与保留字

ECMAScript 3
描述了一致组有一定用途的要害字,这些重要字而用来表示控制语句的上马要结束,或者用于执行一定操作等。按照规则,关键字是语言保留的,不可知就此作标识符。以下是
ECMAScript 3 的全体最主要字:

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

ECMAScript 3 还将 Java
的具有重要字都作为协调的保留字。尽管保留字还从未任何特定的用处,但他俩发或以前叫作关键字:

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

ECMAScript 5 把不严加模式下的保存字缩减为:

class           enum            extends         super
const           export          import

ECMAScript 5 在严厉模式下的保留字为:

implements      package         public
interface       private         static
let             protected       yield

注意,letyield 是 ECMAScript 5 新增的保留字,其他保留字都是
ECMAScript 3 定义的。为了保险兼容性,任何时刻都非建议以 ECMAScript 5
新增的保存字 letyield

ECMAScript 还预定义了多全局变量和函数,也应当避免将她用作标识符:

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

JavaScript 的实际实现可能定义独有的全局变量和函数,每一样栽特定的
JavaScript 运行环境都生谈得来之一个大局属性列表,这一点凡待牢记的。

只是卜的分店

跟另外许多变为语言一样,JavaScript
使用分号(;)将告诉句分隔开。这对准增强代码的可读性和整洁性是大主要之。缺少分隔符,一久告词之收就改为了下一样长长的告句的初始,反之亦然。如果告诉句各自独占一行,通常可以简单语句之间的子公司(程序结尾或花括号
} 之前的支行也得大概)。

var sum = a + b     // 即使没有分号也是有效的语句,不好的写法
var diff = a - b;   // 有效的语句,好的写法

虽说语句结尾的分店不是必须的,但求其他时刻都并非简单它。因为长这个分号可以免过多误,开发人员也可以放心地经删除多余的空格来压缩
JavaScript
代码。另外,加上分号也会见于一些情况下增强代码的性能,因为这么解析解就无需再度消费时测算该在啊插入分号了。

关卡

呼吁判断以下代码是否可行?如果可行要吃来结果,如果不行请证实原委。

// 挑战一
var class = 'person';
console.log(class);     // ???

// 挑战二
var Class = 'person';
console.log(class);     // ???

// 挑战三
var True = false;
console.log(True);      // ???

// 挑战四
var true = false;
console.log(True);      // ???

// 挑战五
var $_$ = 'stone';
console.log($_$);       // ???

// 挑战六
var 00_name = 'stone';
console.log(00_name);   // ???

// 挑战七
var Array = 'null';
console.log(Array);     // ???

// 挑战八
var undefined = 'null';
console.log(undefined); // ???

// 挑战九
var result = 1 + 2
+ 3 + 4
console.log(result);    // ???

更多

关心微信公众号「劼哥舍」回复「答案」,获取关卡详解。
关注
https://github.com/stone0090/javascript-lessons,获取最新动态。