JavaScript权威指南
第2章 词法结构#
2.1 字符集##
JavaScript程序是用Unicode字符集编写的。
2.1.1 区分大小写###
但HTML不区分大小写。
2.1.2 空格、换行符和格式控制符###
JS会忽略标识之间的空格,多数情况也会忽略换行符,因此可以采用整齐的缩进来形成统一的编码风格,提高代码可读性。
2.2 注释##
JS支持两种注释。//单行注释。 /**/可跨行注释,但不能有嵌套注释。
2.3 直接量##
指程序中直接使用的数据值,如数字、字符串文本、布尔值、空、正则表达式直接量。
2.4 标识符和保留字##
JS标识符必须以字母、下划线或美元符开始(不可以是数字),后续字符可以是字母、数字、下划线和美元符。和其他编程语言一样,JS也保留了一些标识符用作自己的关键字,这些保留字不能用作普通的标识符。
JS保留字.png
JS预定义全局变量.png
2.5 可选的分号##
如果语句各自独占一行,通常可以忽略语句之间的分号,程序结尾或右花括号前的分号可省略。两种编程风格,分号全部不省略,分号能省则省。注意,JS不是在所有换行处都填补分号,只有在缺少了分号就无法正确解析代码时才会填补分号。省略分号可能造成一些分歧。
第3章 类型、值和变量#
3.1 数字##
JS不区分整数值和浮点数值,所有数字均用浮点数值表示。JS中直接出现的数字称为数字直接量,负号是一元求反运算符,不属于数字直接量语法的组成部分。
3.1.1 整型直接量###
JS可识别十进制、十六进制整型直接量,有些能识别八进制。
3.1.2 浮点型直接量###
采用传统的实数写法,也可以用指数计数法(e后跟实数表示乘以10的次方)。
3.1.3 算数运算###
除基本运算符外,JS还支持更复杂的算数运算,通过作为math对象的属性定义的函数和常量来实现。
复杂的算数运算.png
JS运算在溢出overflow、下溢underflow、被零整除时都不会报错。溢出结果为±infinity,下溢为±0,被零整除为±0,但0除以0返回一个非数字值NaN。NaN与任何值都不相等,包括自身。x!=x,只有在NaN时为true。
3.1.4 二进制浮点数和四舍五入错误###
3.1.5 日期和时间###
Date()构造函数,用来创建表示日期和时间的对象。
3.2 文本##
字符串string是由16位值组成的不可变的有序序列,字符串和其数组的索引从0开始。
3.2.1 字符串直接量###
JS中的字符串直接量是由单引号或双引号括起来的字符序列。字符串直接量可拆分成数行,每行以 \ 结束。注意用单引号定界字符串时,要小心英文缩写和所有格写法,如it's,需用 \ 对撇号进行转义。当JS与HTML代码混杂时,最好各自使用独立的引号风格。
3.2.2 转义字符###
在JS字符串中,反斜线\有特殊用途。
转义字符.png
3.2.3 字符串的使用###
加号运算符用于数字,表示两数相加,用于字符串表示字符串连接。
字符串调用方法.png
3.2.4 模式匹配###
RegExp()构造函数
3.3 布尔值##
这个类型只有两个值,保留字true和false.通常用于JS控制结构中。任意JS值都可以转换为布尔值。布尔运算符&&、||、!(AND、OR、NOT)
3.4 null和undefined##
3.5 全局对象##
3.6 包装对象##
存取字符串、数字或布尔值的属性时创建的临时对象叫包装对象。
3.7 不可变的原始值和可变的对象引用##
JS中的原始值(null、undefined、布尔值、数字和字符串)与对象(数组和函数)有根本区别。原始值不可更改,原始值的比较是值的比较。对象的值是可修改的,对象的比较并非值的比较,是引用的比较,当且仅当它们引用同一个基对象时才相等。
3.8 类型转换##
类型转换.png3.8.1 转换和相等性###
JS运算符和语句期望使用多样化的数据类型,并可以相互转换。但一个数值转换为另一个数值,并不代表二者相等。
3.8.2 显式类型转换###
做显式转换最简单的方法是用Boolean()、Number()、String()、Object()函数。某些运算符会做隐式类型转换。
3.8.3 对象转换为原始值###
所有的对象继承了两个转换方法,toString()和valueOf()
3.9 变量声明##
在JS中使用一个变量前需要先声明,用var声明,一个var可声明多个变量,还可将变量的初始赋值与变量声明合写在一起。
3.10 变量作用域##
全局变量拥有全局作用域,函数内声明的变量只在函数体内有定义,是局部变量。函数参数也是局部变量,只在函数体内有定义。函数体内,局部变量的优先级高于同名的全局变量。
3.10.1 函数作用域和声明提前###
C语言等编程语言是块级作用域,JS是函数作用域,变量在声明它的函数体内及这个函数体嵌套的任意函数体内都有定义。JS里声明的所有变量都被“提前”到函数顶部。
3.10.2 作为属性的变量###
使用var声明一个变量,创建的这个属性是不可配置的,变量也不能用delete运算符删除;如果给一个未声明的变量赋值,JS自动创建全局变量,可配置属性,也可用delete删除。
3.10.3 作用域链###
第4章 表达式和运算符#
4.1 原始表达式##
原始表达式包括常量或直接量、变量、关键字。
4.2 对象和数组的初始化表达式##
数值的初始化表达式是由一对方括号和括号内由逗号隔开的列表组成,可嵌套。
4.3 函数定义表达式##
4.4 属性访问表达式##
两种写法:expression.identifier; expression[expression];
4.5 调用表达式##
调用函数或方法的语法。表达式(参数0个或多个)。
4.6 对象创建表达式##
创建一个对象并调用一个函数(构造函数)初始化新对象的属性。与函数调用表达式非常相似,只是表达式前多了个new。