《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/blo…

辨别大小写

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/ziyunf…

严厉形式

在 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,猎取最新动态。

    原文作者:劼哥stone
    原文地址: https://segmentfault.com/a/1190000006199374
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞