【读书笔记】JavaScript 基本概念

253 阅读10分钟

3.1 语法

  • 区分大小写

      ECMAScript 中的一切(变量、函数名和操作符)都区分大小写
    
  • 标识符

    • 所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一或多个字符:
      • 第一个字符必须是一个字母、下划线( _ )或一个美元符号( $ );
      • 其他字符可以是字母、下划线、美元符号或数字。
  • 注释

    • // 单行注释
    • /**/ 块级注释
  • 严格模式

      "use strict";
    
  • 语句

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

3.2 关键字和保留字

  • 关键字

  • 保留字

3.3 变量

  • ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说, 每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用 var 操作符(注意 var 是一个关键 字),后跟变量名(即一个标识符),如下所示:
var message;//局部变量
message = "hi"; //全局变量

3.4 数据类型

ECMAScript 中有 5 种简单数据类型(也称为基本数据类型): Undefined 、 Null 、 Boolean 、 Number 和 String 。还有 1种复杂数据类型—— Object , Object 本质上是由一组无序的名值对组成的。

  • 3.4.1 typeof 操作符

    • "undefined" ——如果这个值未定义;
    • "boolean" ——如果这个值是布尔值;
    • "string" ——如果这个值是字符串;
    • "number" ——如果这个值是数值;
    • "object" ——如果这个值是对象或 null ;
    • "function" ——如果这个值是函数。
    var message = "some string";
    alert(typeof message); // "string"
    alert(typeof(message)); // "string"
    alert(typeof 95); // "number"
    
    // typeof (null) 会返回"object" 
    
  • 3.4.2 Undefined 类型

    Undefined 类型只有一个值,即特殊的 undefined 。在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined ,例如:

    var message;
    alert(message == undefined); //true
    
  • 3.4.3 Null 类

Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null 。从逻辑角度来看, null 值表 示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回 "object" 的原因,如下面 的例子所示:

  var car = null;
  
  alert(typeof car); // "object"
  • 3.4.4 Boolean 类型

Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值: true 和 false 。 这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。以下是为变量赋 Boolean 类型值的例子:

var found = true;
var lost = false;
  • 3.4.5 Number 类型

    Number 类型应该是 ECMAScript 中最令人关注的数据类型了,这种类型使用 IEEE754 格式来表示 整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为支持各种数值类型,ECMA-262 定 义了不同的数值字面量格式。

    var octalNum1 = 070; // 八进制的 56
    var intNum = 55; // 十进制的55
    var hexNum1 = 0xA; // 十六进制的 10
    
      1. 浮点数值:数值中必须包含一个小数点,并且小数点后面必须至少有一位数字
      1. 数值范围:5e-324
      1. NaN

    即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况(这样就不会抛出错误了)。
    NaN 本身有两个非同寻常的特点。首先,任何涉及 NaN 的操作(例如 NaN /10)都会返回 NaN ,这 个特点在多步计算中有可能导致问题。其次, NaN 与任何值都不相等,包括 NaN 本身。

      1. 数值转换

有 3 个函数可以把非数值转换为数值: Number() 、 parseInt() 和 parseFloat() ;

  • 3.4.6 String 类型

    String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双 引号(")或单引号(')表示,因此下面两种字符串的写法都是有效的:

    var firstName = "Nicholas";
    var lastName = 'Zakas';
    
      1. 字符字面量

      1. 字符串的特点

    ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变 某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

      1. 转换为字符串 : toString()
    var age = 11;
    var ageAsString = age.toString(); // 字符串"11"
    

  • 3.4.7 Object 类型

    ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建 的对象类型的名称来创建。

var o = new Object();

3.5 操作符

ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符、

关系操作符和相等操作符。

  • 3.5.1 一元操作符

    只能操作一个值的操作符叫做一元操作符。

      1. 递增和递减操作符
    //前置型-递增
    var age = 29;
    ++age;
    
    //后置型-递增
    var age = 29;
    age++;
    
    //前置型-递减
    var age = 29;
    --age;
    
    //后置型-递减
    var age = 29;
    age--;
    

    递增和递减操作符遵循下列规则:

      1. 一元加和减操作符

    一元加/减操作符以一个加号(+)/(-)表示,放在数值前面,对数值不会产生任何影响。

    var s1 = "01";
    var s2 = "1.1";
    var s3 = "z";
    var b = false;
    var f = 1.1;
    var o = {
        valueOf: function() {
            return -1;
        }
    };
    s1 = +s1; // 值变成数值 1
    s2 = +s2; // 值变成数值 1.1
    s3 = +s3; // 值变成 NaN
    b = +b; // 值变成数值 0
    f = +f; // 值未变,仍然是 1.1
    o = +o; // 值变成数值-1
    
  • 3.5.2 位操作符

    位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。

      1. 按位非(NOT)

      按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位非是 ECMAScript 操作符中少数几个与二进制计算有关的操作符之一。

      var num1 = 25; // 二进制 00000000000000000000000000011001
      var num2 = ~num1; // -num1 - 1;
      alert(num2); // -26
      
      1. 按位与(AND)

      按位与操作符由一个和号字符( & )表示,它有两个操作符数。从本质上讲,按位与操作就是将两 个数值的每一位对齐,然后根据下表中的规则,对相同位置上的两个数执行 AND 操作:

      var result = 25 & 3;
      alert(result); //1
      

      1. 按位或(OR)

      按位或操作符由一个竖线符号(|)表示,同样也有两个操作数。按位或操作遵循下面这个真值表。

      var result = 25 | 3;
      alert(result); //27
      

      1. 按位异或(XOR)

      按位异或操作符由一个插入符号(^)表示,也有两个操作数。以下是按位异或的真值表。

      var result = 25 ^ 3;
      alert(result); //26
      

      1. 左移

      左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。

      var oldValue = 2; // 等于二进制的 10
      var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64
      

      1. 有符号的右移

      有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即 正负号标记)。

      var oldValue = 64; // 等于二进制的 1000000
      var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2
      

      1. 无符号右移

      无符号右移操作符由 3 个大于号(>>>)表示,这个操作符会将数值的所有32位都向右移动。对正 数来说,无符号右移的结果与有符号右移相同。

      var oldValue = 64; // 等于二进制的 1000000
      var newValue = oldValue >>> 5; // 等于二进制的 10 ,即十进制的 2
      

  • 3.5.3 布尔操作符

      1. 逻辑非

      逻辑非操作符由一个叹号(!)表示,可以应用于 ECMAScript 中的任何值。

      逻辑非操作符遵循下列规则:

      1. 逻辑与

      逻辑与操作符由两个和号( && )表示

      逻辑与操作符遵循下列规则:


      1. 逻辑或

      逻辑或操作符由两个竖线符号( || )表示

      逻辑与操作符遵循下列规则:

  • 3.5.4 乘性操作符

    ECMAScript 定义了 3 个乘性操作符:乘法、除法和求模。

      1. 乘法

      1. 除法

      1. 求模

  • 3.5.5 加性操作符

    • 1.加法
    • 2.减法
  • 3.5.6 关系操作符

    小于(<)、大于(>)、小于等于(<=)和大于等于(>=)

  • 3.5.7 相等操作符

      1. 相等和不相等

      相等和不相等——先转换再比较, 全等和不全等——仅比较而不转换。

  • 3.5.8 条件操作符

//格式:
variable = boolean_expression ? true_value : false_value;
  • 3.5.9 赋值操作符

  • 3.5.10 逗号操作符

    使用逗号操作符可以在一条语句中执行多个操作,如下面的例子所示:

    var num1=1, num2=2, num3=3;
    

3.6 语句

  • 3.6.1 if 语句
  • 3.6.2 do-while 语句
  • 3.6.3 while 语句
  • 3.6.4 for 语句
  • 3.6.5 for-in 语句
  • 3.6.6 label 语句
  • 3.6.7 break 和 continue 语句
  • 3.6.8 with 语句
  • 3.6.9 switch 语句

3.7 函数

函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、
任何时候调用执行。ECMAScript 中的函数使用 function 关键字来声明,后跟一组参数以及函数体。
函数的基本语法如下所示:
```
function functionName(arg0, arg1,...,argN) {
    statements
}

// 函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
// ECMAScript 函数不能像传统意义上那样实现重载。
```

3.8 小结

JavaScript 的核心语言特性在 ECMA-262 中是以名为 ECMAScript 的伪语言的形式来定义的。 ECMAScript 中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但 没有对取得输入和产生输出的机制作出规定。理解 ECMAScript 及其纷繁复杂的各种细节,是理解其在 Web 浏览器中的实现——JavaScript 的关键。目前大多数实现所遵循的都是 ECMA-262 第 3 版,但很多 也已经着手开始实现第 5 版了。以下简要总结了 ECMAScript 中基本的要素。

ECMAScript 中的基本数据类型包括 Undefined 、 Null 、 Boolean 、 Number 和 String 。

与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型, Number 类型可 用于表示所有数值。

ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基 础类型。

严格模式为这门语言中容易出错的地方施加了限制。

ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作 符、关系操作符、相等操作符及赋值操作符等。

ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、 for 语句和 switch 语句等。 ECMAScript 中的函数与其他语言中的函数有诸多不同之处。

无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。

实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。

ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式 传递的。

可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。

由于不存在函数签名的特性,ECMAScript 函数不能重载。