當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
《JavaScript 高级程序设计》笔记 第1~5章
生活随笔
收集整理的這篇文章主要介紹了
《JavaScript 高级程序设计》笔记 第1~5章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第1章
js是專為網頁交互而設計的腳本語言,由3部分組成:
- ECMAScript,提供核心語言功能
- DOM文檔對象模型,提供訪問和操作網頁內容的方法和接口
- BOM瀏覽器對象模型,提供與瀏覽器交互的方法和接口
js是一種腳本語言、解釋性語言、動態類型語言、基于對象的語言
第2章 在HTML中使用JavaScript
1)易于維護
2)可緩存:若多個頁面使用同一js文件,只需下載一次,加快了頁面加載速度
*指定async屬性的目的不是讓頁面等待兩個腳本下載和執行,從而異步加載其他內容。為此,建議異步腳本不要在加載期間修改DOM(P14)
1)瀏覽器不支持腳本
2)瀏覽器支持腳本,但腳本被禁用
defer、async作用和區別分析
8. 文檔模式:混雜模式和標準模式(影響css內容的呈現)
doctype
若在文檔開始處沒有聲明文檔類型,則所有的瀏覽器都會默認開啟混雜模式,但這樣并不值得推薦,因為不同瀏覽器在這種模式下的行為差異非常大,如果不使用某些hack技術,跨瀏覽器的行為沒有一致性可言。
標準模式聲明:HTML5
<!DOCTYPE html>為js定義的解析與執行模型:在嚴格模式下,ECMAScript3中的一些不確定的行為將得到處理,對某些不安全的操作也會拋出錯誤
onload事件
window.onload
第3章 基本概念
3.1~3.3 語法、關鍵字和保留字、變量
3.4 數據類型
1)找到第一個非空格字符;
2)若第一個非空格字符不是數字或負號,則返回NaN;
3)parseInt()會識別各進制,但ECMAScript3和5存在分歧,因此推薦提供第二個參數(基數);
* 例子
var num1 = 070; // 八進制的56 var num2 = 079; // 無效的八進制數值-解析為79 var num3 = 0xA; // 十六進制的10var floatNum1 = .1 // 有效,但不推薦 var floatNum2 = 1.; //小數點后面沒有數字 - 解析為1 var floatNum3 = 10.0; // 整數,解析為10isNaN(NaN); // true isNaN(10); // false isNaN("10"); // false (可以被轉換成數值) isNaN("blue"); // true isNaN(true); // false(可以被轉換成數值)Number(" ") // 0 Number("000011") // 11parseInt("1234blue") // 1234 parseInt(" ") // NaN parseInt("0xA") // 10 (十六進制數) parseInt(22.5) // 22 parseInt("070") // 56 (八進制數) parseInt("70") // 70 (十進制數) parseInt("0xf") // 15 (十六進制數)parseInt(“10”,2) // 2(二進制數) parseInt(“10”,8) // 8(八進制數) parseInt(“10”,10) // 10(十進制數) parseInt(“10”,16) // 16(十六進制數) parseFloat("1234blue") // 1234 parseFloat("0xA") // 0 parseFloat("22.5") // 22.5 parseFloat("22.34.5") // 22.34 parseFloat("0908.5") // 908.5 parseFloat("3.125e7") // 31250000第4章 變量、作用域和內存問題
函數提升優先級高于變量提升
1.typeof:基本數據類型 instanceof:引用類型
如果變量是引用類型的實例,則返回true;
2.執行環境及作用域
執行環境及作用域
var color = 'blue' function changeColor() {var anotherColor = 'red'function swapColors() {var tempColor = anotherColoranotherColor = color color = tempColor// 最內層函數可以訪問全局的color,外層函數的局部變量anoteColor 和自己的局部變量tempColor}swapColors()// 全局函數可以訪問全局的color和自己的局部變量anotherColor,但不能訪問內部函數的tempColor } changeColor()- 函數被調用時,活動對象是:this、arguments、和其他命名參數;
- 函數這類的局部環境的變量對象,只在函數執行過程中存在。當函數執行完畢后,局部活動對象就會被銷毀;
- 創建函數時,先創建一個預先包含全局變量對象的作用域鏈,當調用函數時,會為函數創建執行環境,創建函數的活動對象,并將其推入執行環境作用域鏈的前端
閉包:有權訪問另一個函數作用域中的變量的函數
- 重要的是,在外部函數執行完畢后,其活動對象也不會被銷毀,因為內部匿名函數(閉包)仍然在引用這個活動對象。(但它的執行環境的作用域鏈會被銷毀)直到匿名函數被銷毀后,外部函數的活動對象才銷毀。
- 匿名函數被返回,而且在其他地方被調用,也仍然可以訪問變量key
第5章 引用類型
5.1 Object
person["first name"]
5.2 Array
這個方法確定某個值到底是不是數組,而不管它是在哪個全局執行環境中創建的;
數組調用toLocaleString(): 對數組每一項調用這個方法;
5.3 Date
5.4 RegExp / /+標志
g:全局模式,應用于所有字符串,而非在發現第一個匹配項時立即停止;
i:不區分大小寫;
m:多行模式;
reg.exec(str)
reg.test(str)
5.5 Function
5.6 基本包裝類型
- 每當讀取一個基本類型的時候,后臺就會創建一個對應的基本包裝類型對象,這個對象只存在一瞬間,會被立即銷毀;
- typeof 基本包裝類型的值是 object;
- 使用轉型函數和構造函數(new)typeof有區別
5.6.1 Boolean
var obj = new Boolean(false) var result = obj && (true) console.log(result) // true5.6.2 Number
var num = 10.005 console.log(num.toFixed(2)) // 10.01 自動舍入5.6.3 String;
5.7 單體內置對象
Global和Math
5.8 valueof()和toString()
- 數組調用valueOf(),結果還是數組;
- Date調用valueOf(),結果是日期的毫秒;
- RexExp調用valueOf(),返回正則表達式本身;
- 基本包裝類型Boolean的實例重寫valueOf(),返回基本類型false或true;
- 基本包裝類型Number的valueOf()返回數值;
- 數組調用toString():返回逗號拼接每個值的字符串形式(最終結果是一個字符串);
數組調用toLocaleString(): 對數組每一項調用這個方法; - RegExp的實例調用toString() / toLocaleString() 返回正則表達式的字面量;
- 函數的toString() / toLocaleString()返回函數代碼;
- 基本包裝類型Boolean的toString(),返回字符串’false’ 或 ‘true’;
- 基本包裝類型Number的toString(),返回數值幾進制的字符串形式;
5.9 判斷類型終極方法Object.prototype.toString()
Object.prototype.toString.call({}) // '[object Object]' Object.prototype.toString.call([]) // '[object Array]' Object.prototype.toString.call(() => {}) // '[object Function]' Object.prototype.toString.call('seymoe') // '[object String]' Object.prototype.toString.call(1) // '[object Number]' Object.prototype.toString.call(true) // '[object Boolean]' Object.prototype.toString.call(Symbol()) // '[object Symbol]' Object.prototype.toString.call(null) // '[object Null]' Object.prototype.toString.call(undefined) // '[object Undefined]'// 對于內置對象 or 構造函數 Object.prototype.toString.call(new Date()) // '[object Date]' Object.prototype.toString.call(Math) // '[object Math]' Object.prototype.toString.call(new Set()) // '[object Set]' Object.prototype.toString.call(new WeakSet()) // '[object WeakSet]' Object.prototype.toString.call(new Map()) // '[object Map]' Object.prototype.toString.call(new WeakMap()) // '[object WeakMap]'總結
以上是生活随笔為你收集整理的《JavaScript 高级程序设计》笔记 第1~5章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jna调用dll文件_关于ja
- 下一篇: 重学《JavaScript 高级程序设计