大致看過一遍紅寶書,想讓自己留下點東西。
script屬性
外部js優點:
- 可維護性
- 可緩存:兩個頁面使用同一js,只要加載一次。
數據類型
- 基本:字符,數值,布爾(true和false區分大小寫),null,undefined
- 引用類型:數組,對象
- typeof temp或者typeof(temp) ty****peof null 返回object
數值
- 特殊數值NaN:涉及的操作均爲NaN;與任何值不等,不等Nan
- Number():null和空字符串–》0
- parseInt(“124as”)空字符–》Nan
- var num= Math.pow(5,2) //25
字符
變量
- 函數內定義的var temp變量,在函數外會被銷燬,而只定義temp作爲全局變量會保留;
不能重載,即函數覆蓋。
作用域鏈
垃圾收集的策略
數組item Array
- 棧push pop
- 隊列shift取出第一個,unshift末尾增加
- reverse()反轉
- color.slice(1),轉爲拼接字符串
- num.indexOf(6) 返回下標或-1
- splice()刪除,插入,替換
- filter()過濾,括號內+條件-》
- map(function(){})數組值轉換
- reduce(function)迭代累加
正則表達式
函數內置屬性
- arguement.callee: 消除緊密藕合,即,在別處也可使用該函數(遞歸調用後,可以繼續使用)
- this,函數在全局作用域運行時,this=window
創建對象(五種方式)
- 工廠模式:函數內創建對象,最後return 對象。使用時var person= createPerson(‘hzx’,29)
- 構造函數:函數內使用this,無需return。使用時var person = new creatPerson()
- **原型模式: prototype所有成員共享屬性和方法,各自實例可以修改自己的值。**存在問題:兩個實例共享的原型,屬性值是引用類型時,該值會被共享。2、
function Person {
person.prototype.name=name }
原型鏈理解
- 一個原型對象A(包括屬性和方法)被另一個原型B繼承,B可以使用A的屬性和方法。
- B.prototype= new A()
- 存在問題:1、引用類型的屬性值會共享 2、無法向原型A中傳參。解決方法(借用構造函數和組合繼承)
借用構造函數
- 使用call()和apply(): 子構造函數中,funA{ funA.call(this)}
組合繼承(使用最多)