第三章 基本概念 3.1-.3.3

本章内容 :

  • 语法

  • 数据类型

  • 流控制语句

  • 函数

任何语言的核心都必然会描述这门语言基本的工作原理。而描述的内容通常都要涉及这门语 言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。如前所述, ECMA-262通过叫做 ECMAScript的“伪语言”为我们描述了 JavaScript的所有这些基本概念。

目前,ECMA-262 第 3 版中定义的 ECMAScript 是各浏览器实现多的一个版本。ECMA-262 第 5 版是浏览器接下来实现的版本,但截止到 2011 年底,还没有浏览器完全实现了这个版本。为此,本章 将主要按照第 3版定义的 ECMAScript介绍这门语言的基本概念,并就第 5版的变化给出说明。
在这里插入图片描述

3.1 语法

ECMAScript的语法大量借鉴了 C及其他类 C语言(如 Java和 Perl)的语法。因此,熟悉这些语言 的开发人员在接受 ECMAScript更加宽松的语法时,一定会有一种轻松自在的感觉。

3.1.1 区分大小写

要理解的第一个概念就是 ECMAScript中的一切(变量、函数名和操作符)都区分大小写。这也就 意味着,变量名 test 和变量名 Test 分别表示两个不同的变量,而函数名不能使用 typeof,因为它 是一个关键字(3.2节介绍关键字),但 typeOf 则完全可以是一个有效的函数名。

3.1.2 标识符

所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照以下格式规则组合起来的一个或者多个字符:

  • 第一个字符必须是一个字母、下划线、或一个美元符号
  • 其他字符可以是字母、下划线、美元符号或数字

按照惯例,ECMAscript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写。

3.1.3 注释

ECMAScript使用C风格的注释,包括单行注释和块级注释。

  1. 单行注释以两个斜杠开头
//单行注释
  1. 块级注释以一个斜杠和一个星号(/)开头,以一个星号和一个斜杠(/)结尾。
/*
* 这是一个多行
*(块级注释)
*
*/

3.1.4 严格模式

在顶部添加如下代码即可进入严格模式

"use strict";

在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:

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

严格模式下,JavaScript 的执行结果会有很大不同,因此本书将会随时指出严格模式下的区别。支 持严格模式的浏览器包括 IE10+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。

3.1.5 语句

ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾;

var sum = a + b            // 即使没有分号也是有效的语句——不推荐
var diff = a - b;          // 有效的语句——推荐

可以使用C风格的语法把多余的语句整合到一个代码块中,即代码块以左花括号{开头,以右花括号}结尾。

if (test)
   alert(test);  //有效但容易出错

if (test){
   alert(test)
};                   //推荐使用

3.2 关键字和保留字

3.2.1 关键字

ECMA-262描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或 者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是 ECMAScript 的全部关键字(带*号上标的是第 5版新增的关键字)

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

3.2.2 保留字

以下是 ECMA-262第 3版定义的全部保留字:

abstract short boolean export interface static enum int
static byte extends long super char final native
synchronized class float package throws const goto private
transient debugger implements protected volatile double import public

第 5版把在非严格模式下运行时的保留字缩减为下列这些:

class enum extends
super const export
import

第五版严格模式下:

implements package public
interface private static
let protected yield

第六版新增了let和const关键字

总结

  1. 使用保留字标识符可能会也可能不会出错,具体取决与特定的引擎。一般来说。最好不要使用关键字和保留字作为标识符和属性名,以便与将来的ECMAScript版本兼容。
  2. ECMA-262第 5版对 eval 和 arguments 还施加了限制。在严格模式下,这两个名字也不能作为标识符或属性名,否则会抛出错误。

#3.3 变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。
定义变量时要用var操作符(var是一个关键字),后跟变量名(即一个标识符),
如下所示

var message;

这行代码定义了一个名为message的变量,该变量可以用来保存任何值(像这样未经初始化的变量,会保存一个特殊的值——undefined)。

注意:用var操作符定义的变量将成为定义变量作用域中的局部变量。

如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁。例如:

function test () {
    var message = "hi"; //局部变量
}
test();
alert(message);  //错误提示:message is not defined

像下面这 样省略 var 操作符,从而创建一个全局变量

function test() {
    message = "hi"; //全局变量省略了 var 操作符,因而 message 就成了全局变量
}
console.log(typeof message);//> undefined
test();//只要调用过一次 test()函 数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。
console.log(message);//> hi

虽然省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局 部作用域中定义的全局变量很难维护,而且如果有意地忽略了 var 操作符,也会由于 相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式 下会导致抛出 ReferenceError 错误。

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分 隔开即可:

var message = "hi",
    found = false,
    age = 29;

这个例子定义并初始化了 3个变量。同样由于 ECMAScript是松散类型的,因而使用不同类型初始 化变量的操作可以放在一条语句中来完成。虽然代码里的换行和变量缩进不是必需的,但这样做可以提 高可读性。

发布了189 篇原创文章 · 获赞 193 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/tianxintiandisheng/article/details/105516170