这个系列把书的精华部分转化为简介的文档格式,方便自己以后去复习。
方便和我一样被技术书籍的厚度劝退的朋友,用最短的时间,读完这本书,得到有价值的东西。
第一章
1. JavaScript简史
在JavaScript问世之前,必须把表单数据发送到服务器端去校验输入是否无效。Netscape Navigator 希望通过 JavaScript 在拔号上网的时代,在客户端进行简单的校验。
Netscape 为了搭上媒体热炒 Java 的顺风车,临时把 LiveScript 改名为 JavaScript。
1998年,ECMAScript 标准诞生。
2.JavaScript实现
一个完整的 JavaScript 实现应该由以下三个不同的部分组成:
(1)ECMAScript,由 ECMA-262 定义,提供核心语言功能;
(2)文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
(3)浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
3.JavaScript的版本
第 3 版标志着 ECMAScript 成为了一门真正的语言。
2009 年 12 月 3 日发布了第5版。ECMAScript 5 也称为 ES5 和 ECMAScript 2009。
4.主流浏览器的支持
JavaScript 的这三个组成部分,在当前五个主要浏览器(IE、Firefox、Chrome、Safari 和 Opera)中
都得到了不同程度的支持。所有浏览器对 ECMAScript 第 3 版的支持都还不错,而对
ECMAScript 5 的支持程度越来越高,但对 DOM 的支持则彼此相差比较多。
第二章
<script>元素
所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析。
现代 Web 应用程序一般都把全部 JavaScript 引用放在<body>元素中页面内容的后面,让页面先加载html,避免出现空白。
src:可选。表示包含要执行代码的外部文件。
async:不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。
defer:先下载,脚本被延迟到整个页面都解析完毕后再运行
<script type="text/javascript" async src="example2.js"></script>
第三章
JavaScript语法
1.基本语法
ECMAScript 中的一切(变量、函数名和操作符)都区分大小写。
变量、函数、属性的名字,或者函数的参数命名规则:
(1)第一个字符不能是数字;
(2)由字母、下划线、美元符号或数字组成;
(3)采用驼峰大小写格式,例如:firstSecond。(非必须)
注释:
// 单行注释
/*
* 这是一个多行
* (块级)注释
*/
2.严格模式:
ECMAScript 5 引入了严格模式(strict mode)的概念。在严格模式下,ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加如下代码:
"use strict";
//在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:
function doSomething(){
"use strict";
//函数体
}
支持严格模式的浏览器包括 IE10+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。
3.局部变量和全局变量:
function test(){
var message = "hi"; // 局部变量
}
test();
alert(message); // 错误!
function test(){
message = "hi"; // 全局变量
}
test();
alert(message); // "hi"
4.数据类型:
ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number
和 String。
还有 1种复杂数据类型——Object。
null:
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。
if (car != null){
// 对 car 对象执行某些操作
}
undefined 值是派生自 null 值的,将该变量初始化为 null ,有助于进一步区分 null 和 undefined。
alert(null == undefined); //true
值得注意的是:null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因,
alert(typeof null); // "object"
Boolean类型:
其他类型转化为boolean的结果:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN(参见本章后面有关NaN的内容) |
Object | 任何对象 | null |
Undefined | n/a | undefined |
number类型:
有 3 个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
除了以十进制表示外,整数还可以通过八进制(以 8 为基数)或十六进制(以 16 为基数)的字面值来表示。
八进制字面量在严格模式下是无效的。
十六进制字面值的前两位必须是 0x,后跟任何十六进制数字(0~9 及 A~F)。其中,字母 A~F可以大写,也可以小写。
parseInt的转换例子:
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)
浮点数:
浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2的结果不是 0.3,而是 0.30000000000000004。
var floatNum1 = 1.; // 小数点后面没有数字——解析为 1
var floatNum2 = 10.0; // 整数——解析为 10
var floatNum = 3.125e7; // 3.125 乘以 10的7次方,等于 31250000
NaN:
任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN,
NaN 与任何值都不相等,包括 NaN 本身。例如,下面的代码会返回 false。
数值的范围:
ECMAScript 能够表示的最小数值保存在 Number.MIN_VALUE 中——在大多数浏览器中,这个值是 5e-324;能够表示的最大数值保存在Number.MAX_VALUE 中——在大多数浏览器中,这个值是 1.7976931348623157e+308。超出这个范围会被转化为-Infinity(负无穷),Infinity(正无穷)。
string类型:
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要
toString()方法转化字符串:
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"
在不知道要转换的值是不是 null 或 undefined 的情况下,还可以使用转型函数 String(),这个
函数能够将任何类型的值转换为字符串。
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"
Object类型:
ECMAScript 中的对象其实就是一组数据和功能的集合。
var o = new Object();
Object 的每个实例都具有下列属性和方法。
由于在 ECMAScript 中 Object 是所有对象的基础,因此所有对象都具有这些基本的属性和方法:
constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
就是 Object()。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
的原型中)是否存在。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型 propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句
(本章后面将会讨论)来枚举。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值
相同。
5.运算符
一元运算符:
--num先运算再自减,num++先自增再运算。
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 等于 21
var num4 = num1 + num2; // 等于 21