JavaScript高級(jí)程序設(shè)計(jì)(第3版)讀書筆記(一)

這個(gè)系列把書的精華部分轉(zhuǎn)化為簡介的文檔格式,方便自己以后去復(fù)習(xí)。
方便和我一樣被技術(shù)書籍的厚度勸退的朋友,用最短的時(shí)間,讀完這本書,得到有價(jià)值的東西

第一章

1. JavaScript簡史
在JavaScript問世之前,必須把表單數(shù)據(jù)發(fā)送到服務(wù)器端去校驗(yàn)輸入是否無效。Netscape Navigator 希望通過 JavaScript 在拔號(hào)上網(wǎng)的時(shí)代,在客戶端進(jìn)行簡單的校驗(yàn)。

Netscape 為了搭上媒體熱炒 Java 的順風(fēng)車,臨時(shí)把 LiveScript 改名為 JavaScript。
1998年,ECMAScript 標(biāo)準(zhǔn)誕生。
2.JavaScript實(shí)現(xiàn)
一個(gè)完整的 JavaScript 實(shí)現(xiàn)應(yīng)該由以下三個(gè)不同的部分組成:
(1)ECMAScript,由 ECMA-262 定義,提供核心語言功能;
(2)文檔對(duì)象模型(DOM),提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口;
(3)瀏覽器對(duì)象模型(BOM),提供與瀏覽器交互的方法和接口。
3.JavaScript的版本
第 3 版標(biāo)志著 ECMAScript 成為了一門真正的語言。
2009 年 12 月 3 日發(fā)布了第5版。ECMAScript 5 也稱為 ES5 和 ECMAScript 2009。
4.主流瀏覽器的支持
JavaScript 的這三個(gè)組成部分,在當(dāng)前五個(gè)主要瀏覽器(IE、Firefox、Chrome、Safari 和 Opera)中
都得到了不同程度的支持。所有瀏覽器對(duì) ECMAScript 第 3 版的支持都還不錯(cuò),而對(duì)
ECMAScript 5 的支持程度越來越高,但對(duì) DOM 的支持則彼此相差比較多。

第二章

<script>元素
所有<script>元素都會(huì)按照它們?cè)陧撁嬷谐霈F(xiàn)的先后順序依次被解析。
現(xiàn)代 Web 應(yīng)用程序一般都把全部 JavaScript 引用放在<body>元素中頁面內(nèi)容的后面,讓頁面先加載html,避免出現(xiàn)空白。
src:可選。表示包含要執(zhí)行代碼的外部文件。
async:不讓頁面等待兩個(gè)腳本下載和執(zhí)行,從而異步加載頁面其他內(nèi)容。
defer:先下載,腳本被延遲到整個(gè)頁面都解析完畢后再運(yùn)行

    <script type="text/javascript" async src="example2.js"></script>

第三章

JavaScript語法

1.基本語法
ECMAScript 中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫。

變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)命名規(guī)則:
(1)第一個(gè)字符不能是數(shù)字;
(2)由字母、下劃線、美元符號(hào)或數(shù)字組成;
(3)采用駝峰大小寫格式,例如:firstSecond。(非必須)
注釋:

// 單行注釋
/* 
* 這是一個(gè)多行
* (塊級(jí))注釋
*/

2.嚴(yán)格模式:
ECMAScript 5 引入了嚴(yán)格模式(strict mode)的概念。在嚴(yán)格模式下,ECMAScript 3 中的一些不確定的行為將得到處理,而且對(duì)某些不安全的操作也會(huì)拋出錯(cuò)誤。要在整個(gè)腳本中啟用嚴(yán)格模式,可以在頂部添加如下代碼:

    "use strict";
//在函數(shù)內(nèi)部的上方包含這條編譯指示,也可以指定函數(shù)在嚴(yán)格模式下執(zhí)行:
    function doSomething(){ 
       "use strict"; 
       //函數(shù)體
    }

支持嚴(yán)格模式的瀏覽器包括 IE10+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。
3.局部變量和全局變量:

function test(){ 
 var message = "hi"; // 局部變量
} 
test(); 
alert(message); // 錯(cuò)誤!

function test(){ 
 message = "hi"; // 全局變量
} 
test(); 
alert(message); // "hi"

4.數(shù)據(jù)類型:
ECMAScript 中有 5 種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number
和 String。
還有 1種復(fù)雜數(shù)據(jù)類型——Object。

null:
如果定義的變量準(zhǔn)備在將來用于保存對(duì)象,那么最好將該變量初始化為 null 而不是其他值。

if (car != null){ 
 // 對(duì) car 對(duì)象執(zhí)行某些操作
}

undefined 值是派生自 null 值的,將該變量初始化為 null ,有助于進(jìn)一步區(qū)分 null 和 undefined。

alert(null == undefined); //true

值得注意的是:null 值表示一個(gè)空對(duì)象指針,而這也正是使用 typeof 操作符檢測 null 值時(shí)會(huì)返回"object"的原因,

alert(typeof null); // "object"

Boolean類型:
其他類型轉(zhuǎn)化為boolean的結(jié)果:

數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數(shù)字值(包括無窮大) 0和NaN(參見本章后面有關(guān)NaN的內(nèi)容)
Object 任何對(duì)象 null
Undefined n/a undefined

number類型:
有 3 個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()、parseInt()和 parseFloat()。

var num1 = Number("Hello world!"); //NaN 
var num2 = Number(""); //0 
var num3 = Number("000011"); //11 
var num4 = Number(true); //1

除了以十進(jìn)制表示外,整數(shù)還可以通過八進(jìn)制(以 8 為基數(shù))或十六進(jìn)制(以 16 為基數(shù))的字面值來表示。
八進(jìn)制字面量在嚴(yán)格模式下是無效的。
十六進(jìn)制字面值的前兩位必須是 0x,后跟任何十六進(jìn)制數(shù)字(0~9 及 A~F)。其中,字母 A~F可以大寫,也可以小寫。
parseInt的轉(zhuǎn)換例子:

var num1 = parseInt("1234blue"); // 1234 
var num2 = parseInt(""); // NaN 
var num3 = parseInt("0xA"); // 10(十六進(jìn)制數(shù))
var num4 = parseInt(22.5); // 22 
var num5 = parseInt("070"); // 56(八進(jìn)制數(shù))
var num6 = parseInt("70"); // 70(十進(jìn)制數(shù))
var num7 = parseInt("0xf"); // 15(十六進(jìn)制數(shù))
var num1 = parseInt("10", 2); //2 (按二進(jìn)制解析)
var num2 = parseInt("10", 8); //8 (按八進(jìn)制解析)
var num3 = parseInt("10", 10); //10 (按十進(jìn)制解析)
var num4 = parseInt("10", 16); //16 (按十六進(jìn)制解析)

浮點(diǎn)數(shù):
浮點(diǎn)數(shù)值的最高精度是 17 位小數(shù),但在進(jìn)行算術(shù)計(jì)算時(shí)其精確度遠(yuǎn)遠(yuǎn)不如整數(shù)。例如,0.1 加 0.2的結(jié)果不是 0.3,而是 0.30000000000000004。

var floatNum1 = 1.; // 小數(shù)點(diǎn)后面沒有數(shù)字——解析為 1
var floatNum2 = 10.0; // 整數(shù)——解析為 10
var floatNum = 3.125e7; // 3.125 乘以 10的7次方,等于 31250000

NaN:
任何涉及 NaN 的操作(例如 NaN/10)都會(huì)返回 NaN,
NaN 與任何值都不相等,包括 NaN 本身。例如,下面的代碼會(huì)返回 false。
數(shù)值的范圍:
ECMAScript 能夠表示的最小數(shù)值保存在 Number.MIN_VALUE 中——在大多數(shù)瀏覽器中,這個(gè)值是 5e-324;能夠表示的最大數(shù)值保存在Number.MAX_VALUE 中——在大多數(shù)瀏覽器中,這個(gè)值是 1.7976931348623157e+308。超出這個(gè)范圍會(huì)被轉(zhuǎn)化為-Infinity(負(fù)無窮),Infinity(正無窮)。
string類型:
ECMAScript 中的字符串是不可變的,也就是說,字符串一旦創(chuàng)建,它們的值就不能改變。要
toString()方法轉(zhuǎn)化字符串:

var age = 11; 
var ageAsString = age.toString(); // 字符串"11" 
var found = true; 
var foundAsString = found.toString(); // 字符串"true"

在不知道要轉(zhuǎn)換的值是不是 null 或 undefined 的情況下,還可以使用轉(zhuǎn)型函數(shù) String(),這個(gè)
函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串。

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 中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合。

var o = new Object();

Object 的每個(gè)實(shí)例都具有下列屬性和方法。
由于在 ECMAScript 中 Object 是所有對(duì)象的基礎(chǔ),因此所有對(duì)象都具有這些基本的屬性和方法:
constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)。對(duì)于前面的例子而言,構(gòu)造函數(shù)(constructor)
就是 Object()。
hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(而不是在實(shí)例
的原型中)是否存在。
isPrototypeOf(object):用于檢查傳入的對(duì)象是否是傳入對(duì)象的原型? propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用 for-in 語句
(本章后面將會(huì)討論)來枚舉。
toLocaleString():返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)。
toString():返回對(duì)象的字符串表示。
valueOf():返回對(duì)象的字符串、數(shù)值或布爾值表示。通常與 toString()方法的返回值
相同。
5.運(yùn)算符
一元運(yùn)算符:
--num先運(yùn)算再自減,num++先自增再運(yùn)算。

var num1 = 2; 
var num2 = 20; 
var num3 = --num1 + num2; // 等于 21 
var num4 = num1 + num2; // 等于 21
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容