红宝书阅读笔记ch3-1

红宝书阅读笔记ch3-1

基本概念-ECMAScript基础语法
语法、关键字和保留字、 变量、 数据类型

语法

  1. 区分大小写,ECMAScript中的一切都区分大小写。

  2. 标识符,就是指变量、函数、属性的名字,标识符有以下几个规则:

    • 第一个字符必须是一个字母、下划线(_)、或一个美元符号;

    • 其他字符可以是字母、下划线、美元符号或数字;

    • ECMAScript标识符采用驼峰大小格式,也就是第一个字母小写,剩下的每个单词的首字母大写,例如:firstSecond、myCar、doSomethingImportant。

    • 不能把关键字、保留字、true、false和null用作标识符。

    • 可以包含扩展的ASCII或Unicode字母字符。但是不建议这样做,因为很容易和英文混淆。

  3. 注释
    //单行注释
    /* 这是一个多行注释 */

  4. 严格模式
    使用 “use strict” 指令
    “use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
    它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
    “use strict” 的目的是指定代码在严格条件下执行。
    严格模式下你不能使用未声明的变量。
    Note 支持严格模式的浏览器:
    Internet Explorer 10 +、 Firefox 4+ Chrome 13+、 Safari 5.1+、 Opera 12+。
    为什么使用严格模式:
    -消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

    • 消除代码运行的一些不安全之处,保证代码运行的安全;

    • 提高编译器效率,增加运行速度;

    • 为未来新版本的JavaScript做好铺垫。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>使用 "use strict":</h1>
<h3>不允许使用未定义的变量。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14; // 报错 (x 未定义)
</script>
</body>
</html>
  1. 语句

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

    • 在控制语句中使用代码块可以让编程意图更加清晰。


关键字和保留字

  • 关键字用于表示控制语句的开始和结束或者执行特定的规则。

  • 关键字不能用在标识符。

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
  • 保留字是一组不能用作标识符的字符,尽管现在这些保留字在这门语言中没有特定的用途但将来可能会用作关键字。

abstract enum int short
boolean export interface static
byte extends long super

变量

  • ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任意类型的数据。

  • 定义变量时要使用var操作符,后跟一个变量名,如下所示:
    var message;
    这行代码定义了一个名为message的变量,该变量可以用来保存任何值,像这样未经过初始化的变量,会保存一个特殊的值—undefined。

  • ECMAScript也支持直接初始化变量,因此在定义变量的同时就可以设置变量的值,如下所示:
    var message = “hi”;

  • 在变量message中保存一个字符串值”hi”。像这样初始变量并不会把它标识为字符串类型;初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型,如下所示:
    var message = “hi”;
    message = 100; //有效,但不推荐

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

  • 在函数中省略var操作符定义的变量,只要调用了一次该函数,该变量就会变成全局变量,但是这样的方法不被推荐,因为在局部作用域中定义的全局变量很难维护。

  • 可以使用一条语句定义多个变量,只要把每个变量用逗号分隔开即可;
    var message=”hi”;
    found=false;
    age=29;

  • 在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误。


数据类型

  • ECMAScript中有五种基本数据类型:Undefined、Null、Boolean、Number和String。

  • 还有一种复杂数据类型—Object,Object本质上是一组无序的名值对组成。

    1. typeof操作符
      typeof操作符是用来检测给定变量的数据类型,对一个值使用typeof可能返回下列某个字符串:

      “undefined”—如果这个值未定义;
      “boolean”—如果这个值是布尔值;
      “string”—如果这个值是字符串;
      “number”—如果这个值是数值;
      “object”—如果这个值是对象或者是null;
      “function”—如果这个值是函数。
var message="some string";
alert(typeof message); //"String"
alert( (typeof message) ); //"String"
alert(typeof 95); //"String"

注意

1.调用typeof null会返回”object“,因为特殊值null被认为是一个空的对象引用。
2.Safari 5及之前的版本、Chrome 7 及之前版本在对正则表达式调用typeof操作符时会返回”function”,而其他浏览器在这种情况下会返回”object”。
3.从技术角度上来说,函数在ECMAScript中是对象,而不是一种数据类型。然而,函数也确实有些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。

  1. undefined类型

    • Undefined类型只有一个值,即特殊的undefined。

    • 在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

    • 声明变量的值为undefined,与声明变量未初始化的值,相等。

    • 包含undefined值的变量与尚未定义的变量还是有不同的。

var message;
alert(message==undefined); //true
var message=undefined;
alert(message==undefined); //true
  1. Null类型

    • Null类型是第二个只有一个值的数据类型,这个特殊的值是null。

    • 从逻辑的角度来看,null值表示一个空对象指针,这也是typeof操作符检测null值会返回”object”的原因。

    • 如果定义的变量准备在将来保存一个对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要检查null的值就可以知道相应的变量是否已经保存了一个的对象的引用。

    • undefined值派生自null值,因此ECMA-262规定对它们的相等性测试要返回true。

    • 不要将一个对象的值显式的设置为undefined。

    • 只要在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样不仅可以体现null作为空对象指针的惯例,还能进一步区分null和undefined。

  2. Boolean 类型

    • Boolean 类型只有两个字面值:true和false。

    • Boolean 类型的字面值区分大小写,

    • ECMAScript中所有的值都有与这两个Boolean值等价的值。要将一个值装换为对应的Boolean值,可以调用转型函数Boolean()。

    • 控制语句能将其他的数据类型转换成Boolean类型。

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 “” (空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined n/a undefined
var message="Hello world";
if(message){
alert("Value is true");
}
  1. Number 类型

    • 浮点数值
    • Number 类型用来表示整数和浮点数值。

    • 支持不同的数值字面值格式包括十进制整数、十六进制整数、八进制整数。

    • 八进制字面值第一位必须是零(0),然后八进制数字序列(0~7)。如果字面数值超出了范围,那么前导零将被忽略,后面的数值当做十进制解析。

    • 八进制字面值在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误。

    • 十六进制字面值前面两位是0x,后跟任何十六进制数字(0~9即A~F)。其中A~F可以大写也可以小写。

    • 浮点数值,就是该数值必须包括一个小数点,并且小数点后面必须至少有一位数字。小数点前面可以没有整数。

    • ECMAScript会选择性的将浮点数值转换成整数。

    • 对于那些极大或极小的数值,可以用科学计数法。

    • 浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。例如0.1加上0.2的结果不是0.3,而是0.30000000000000004。

    • 数值范围
    • 数值范围,ECMAScript能够表示的最小数值保存在 Number.MIN_VALUE,这个值是5e-324,能够表示最大数值保存在Number.MAX_VALUE,这个值是1.7976931348623157e+308。

    • 如果某次计算得到了超出JavaScript数值范围的值,那么这个数值将被自动转换为特殊的Infinity值。正数是正无穷,负数是负无穷。Infinity不能参与计算。

    • 想要确定某个数值是否超过数值范围,可以使用isFinite()函数,这个函数在参数位于最小和最大数值之间会返回true。

    • NaN
    • NaN,即非数值(Not a Number),是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,这样就不会报错了。

    • NaN本身有两个特点,首先任何涉及到NaN的操作都会返回NaN。其次,NaN与任何值都不相等包括它自己。

    • isNaN()函数用于确定参数是否“不是数值”。 isNaN()函数在接收到一个参数后,会尝试将这个值转换为数值。某些不是数值的值会直接转换成数值,例如字符串”10”或Boolean值。而任何不能转换为数值的值都会导致这个函数返回true。

    • 数值转换
    • 将非数值转换为数值的方法有三个,分别是Number()、parseInt()和parseFloat()。

  2. String类型

    • 在ECMAScript字符串的表达方式可以是双引号也可以是单引号,只是用单引号开始也必须用单引号结束,双引号同理。

    • 字符字面量==转义字符,也就是反斜杠。

    • ECMAScript的字符串不可变,要改变某个变量保存的字符串,就要销毁原来的字符串,再用一个包含新值的字符串来填充该变量。

    • 将一个值转换为String 的方法有两个,toString()和String()。

    • 除了null和undefined类型外,其他的类型都有toString()方法。

  3. Object类型

    • ECMAScript中的对象其实就是一组数据和功能的集合。

    • Object 类型是所有它的实例的基础。