JavaScript高级程序设计(第3版)读书笔记(一)

这个系列把书的精华部分转化为简介的文档格式,方便自己以后去复习。
方便和我一样被技术书籍的厚度劝退的朋友,用最短的时间,读完这本书,得到有价值的东西

第一章

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。