《Javascript权威指南》就是前端工程师口中常说的犀牛书,得名是由于中文翻译出版的书籍封面是一只犀牛,是学习JavaScript的必读书籍。
JavaScript概述
JavaScript与Java无关,是面向Web的编程语言。前端
前端开发工程师必备的三样技能:描述网页内容的HTML;描述网页样式的CSS和描述网页行为的JavaScript。web
JavaScript是高端的、动态的、弱类型的编程语言,很是符合面向对象和函数式编程的思想。正则表达式
EMCAScript是JavaScript的标准。编程
JavaScript语言核心针对文本、数组、日期和正则表达式定义了许多API,但自己并不提供输入输出功能,输入输出功能由JavaScript的宿主环境(一般指的是web浏览器)提供。数组
词法结构
字符集
- 使用Unicode字符集,该字符集是ASCII和Latin-1的超集。
- 区分大小写。
- 一般忽略换行符、制表符和连续空格。
- 转义序列以u开头,使用4个十六进制字符表示
- 容许多种方式对同一个字符编码,并定义了标准化的解码方式。
注释
- 在行尾“//”以后的文本都会被JavaScript认为是注释并被解释器忽略。
- 还可使用“/”和“/”来包含一段多行注释,能够跨行书写,但不能够嵌套。
直接量
- 就是在程序中直接使用的数据值。例如:整数和小数,字符串,布尔值,null,正则表达式,对象,数组。
标识符和保留字
- 用来对变量和函数命名的名字和标记
- 必须以字符、下划线(_)、美圆符号($)开头,后续可使用字符、数字、下划线、美圆符号。注意数字不容许做为开头出现,以便解释器能够区分标识符和数字。
- 支持全部的Unicode字符集,可是为了移植性考虑,建议只是用Unicode字符和数字。
- 被拿来作本身的关键字的标识符被称为保留字。
- 具体实现可能定义独有的全局变量和函数,每种JavaScript运行环境都有全局属性列表。
可选的分号
- 使用分号分隔语句。
- 当每条语句独占一行时,能够省略分号。
- 解释器在缺乏分号就没法运行的状况下会自动添加分号(注意不必定是每一个换行符处)。
- return break continue以后的表达式不能使用换行,虽然多数状况下不会报错,但会产生逻辑错误。
类型、值和变量
- 表示并操做的值的类型称做数据类型。
- 变量是值的符号名称,能够经过名称来得到对值的引用。
- JavaScript的数据类型分为两类:原始类型和对象类型。
- 原始类型包括数字、字符串和布尔值。除此以外还有两个特殊的原始值:null和undefined。
- 对象是属性的集合,每一个属性都由“名/值对”(值能够是原始值,也能够是对象)构成。
- 普通的JavaScript对象是“命名值”的无序集合,数组是有序集合。
- 函数也是一种特殊的对象。
- 初始化(使用new运算符)一个新建的对象,咱们称为构造函数。
- 每一个构造函数定义了一类(class)对象,表示由构造函数初始化对象的集合。
- JavaScript语言核心定义了Array,Function,Date,RegExp和Error特殊的对象。
- 解释器有本身的内存管理机制,可自动进行内存的垃圾回收,当再也不有任何应用指向一个对象,该对象所占内存资源被回收。
- JavaScript自由进行数据类型转换。
- 变量是无类型的,能够被赋予任何类型的值,使用var声明变量。
数字
- 不区分整数值和浮点数值,全部数字均用浮点数值表示。
- 采用IEEE754标准定义的64位浮点格式表示数字,实际操做时则是基于32位整数。
- 数字直接量前添加(-)号能够获得负值,(-)是一元求反运算符。
整型
- 用一个数字序列表示十进制整数。
- 以“0x”和“0X”位前缀的是十六进制直接量,其后用0-9和A-F表示。
- ECMAScript标准不支持八进制表示,可是某些实现容许采用八进制表示整数。以数字0为前缀,0-7的序列表示八进制数。
- 严格模式下,明确禁止八进制数。
浮点型直接量
- 能够含有小数点,采用传统的实数写法,由整数部分,小数点和小数部分组成。
- 还可采用指数计数法表示,实数后面跟字母e或者E,再加指数。
算术运算
- 算数运算符是用来进行数字运算的。包括加法运算符(+),减法运算符(-),乘法运算符(*),除法运算符(/)和求余运算符(%)。
- 除基本运算符外,还支持更加复杂的算术运算,经过做为Math对象的属性定义的函数和常亮实现。
算术运算溢出、下溢或被零整除时不会报错,结果为特殊值。浏览器
- 溢出时表示Infinity(正无穷)或-Infinity(负无穷)。基于它们的算术运算结果仍是Infinity(保留正负号)。
- 下溢表示为“负零”。返回0,不多用到。
- 被零整除时用无穷表示,零除以零则用NaN表示,除此以外,无穷除以无穷,给负数开方都会获得NaN。
- NaN不等于自身,判断NaN为isNaN()方法,判断无穷使用isFinite()方法。
二进制浮点数和四舍五入错误
- IEEE-754浮点数表示法是一种二进制表示法。
- 能够精确表示1/二、1/8和1/1024这种,可是没法精确表示1/十、1/100等。没法精确表示0.1,因此0.3-0.2==0.2-0.1返回一个false。
日期和时间
- Date()构造函数用来建立表示日期和时间的date对象,包含getFullYear()、getMonth()、getDate()、getDay()、getHours()、getUTCHours()方法。
文本
- 字符串是16位不可变的有序序列。
- 采用UTF-16编码的Unicode字符集。
字符串直接量
转义字符
- 以后加一个字符就不在表示他们的字面含义,例如n表示一个换行符。
字符串的使用
- +表示字符串链接,将第二个字符串拼到第一个字符串的后面。
- length属性表示字符串的长度。
- 字符串固定不变,变化是由于返回了新的字符串。
模式匹配
- RegExp()函数是一个构造函数,建立正则表达式。
布尔值
- 表示两种状态,使用保留字true和false。
- 包含toString()方法,能够转换成‘true’和‘false’