//<![CDATA[ //這裡放代碼 //]]> 基本類型 引用類型 動態添加屬性 不可以,不會出錯,但會出現underfined 可以 複製變數值 相互獨立 指向同一個對象,相互影響 傳遞參數(函數外部的值傳遞給函數內部) 相互獨立 指向同一個對象,相互影響,但是在函數內部重寫的值,不會影響外部 ...
- CData片段可以包含不需要被解析的任意格式的文本內容(在XHTML中用)
//<![CDATA[
//這裡放代碼
//]]>
- 不支持瀏覽器的<script>,使用<noscript>會執行裡面的內容
- 支持嚴格模式的要在IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome
- 函數體內可以使用arguments來訪問參數數組,從而獲取到傳給函數的每一個參數,arguments和傳給函數的參數的記憶體空間是獨立的,只是值是同步的,但是當arguments的下標超出傳給函數的參數個數的話,就會出現underfined
- 函數沒有重載,只會後面一個覆蓋前一個,但是根據傳入參數的個數和類型不同,可以模仿方法的重載
|
基本類型 |
引用類型 |
動態添加屬性 |
不可以,不會出錯,但會出現underfined |
可以 |
複製變數值 |
相互獨立 |
指向同一個對象,相互影響 |
傳遞參數(函數外部的值傳遞給函數內部) |
相互獨立 |
指向同一個對象,相互影響,但是在函數內部重寫的值,不會影響外部,函數已執行完就會銷毀 |
- 作用域鏈是保證執行環境有權訪問的所有變數和函數的有序訪問。比如標識符解析,在函數中,就是從內而外,逐級查找,直到找到標識符,如果最後找不到就會出錯。
執行環境的類型有全局和局部(函數),如果要加長作用域鏈的話,可以使用:
(1) try-catch中的catch
(2) with語句
- js沒有塊級作用域,所以在if或者for語句迴圈完之後,if中的變數聲明會被提價到當前的執行環境當中,for語句的i也會在迴圈結束之後依舊存在於迴圈外部的全局環境中,即最接近的環境當中
函數聲明 |
函數表達式 |
解析器優先讀取,以便在執行任何代碼之前可以訪問 |
要等到執行到它所在的代碼行才會被執行 |
- 函數
arguments(對象) |
保存函數參數 |
|
callee(arguments的屬性) |
是一個指針,指向擁有arguments的函數 比如:arguments.callee(n-1)【在嚴格模式下會出錯】 |
|
this(對象) |
函數執行的環境 |
|
caller(對象的屬性) |
保存調用當前函數的函數引用 比如:arguments.callee.caller |
|
length(屬性) |
函數接受命名參數的個數 |
|
prototype(屬性) |
保存實例方法 |
|
bind(方法) IE9+ |
創建函數的實例,this的值會被綁定給傳到bind()函數的值,比如:fn.bind(o) |
|
非繼承來的方法,在特定的作用域中調用函數,強大之處在於擴充函數運行的作用域 |
||
apply() |
傳入兩個參數,第一個是運行函數的作用域,第二個是參數數組,比如: sum.apply(this, arguments)或者sum.apply(this,[n1,n2]) |
|
call() |
傳入參數,第一個是運行函數的作用域,剩下的是每一個參數
|
|
- 基本包裝轉換類型
Number (n = 10) |
|
.toFixed(2) == 10.00 |
四捨五入顯示幾位小數,IE8不能四捨五入 |
.toExponential() == 1.0e+1 |
返回指數表示法 |
.toPrecision(n) |
返回小數或整數或指數,n幾位顯示幾位 |
String (a=”hello”)------------m,n正數 |
|
.charAt(1) 或者a [1]【IE8】 |
給定位置的字元 |
.charCodeAt(1) |
給定位置的字元的編碼 |
.concat( , , ,) |
拼接任意個的參數 |
.slice(m)/.substring(m)/.substr(m) |
從m位置起的字元串 |
.slice(m,n)/ . substring (m,n) |
從m位置起到n-1的字元串 |
. substr (m,n) |
從m位置起,數n個字元的字元串 |
.slice(-m) |
從(-m+字元串長度)開始數起 |
.substring(-m) |
所有負數都會被轉化成0,從0位置開始 |
.substr(-m) |
從(負的第一個參數+字元串長度)開始數起。 負的第二個參數會被轉換成0 |
.slice(m,-n) |
從m位置起到(-n+字元串長度-1)的字元串 |
. substring (m,-n) |
從m位置起到0的字元串 |
. substr (m,-n) |
從m位置起,數0個字元的字元串==”” |
.indexOf(“h”) |
從頭開始查找,第一次出現的字元位置,可以指定開始查找的位置.indexOf(“h”,5) |
.lastIndexOf(“h”) |
從後開始查找,第一次出現的字元位置,可以指定開始查找的位置. lastIndexOf (“h”,5) |
.trim() |
刪除首碼和尾碼的所有空格 |
.mach(re) |
匹配,返回的是數組 |
.search(re) |
匹配,查找返回的第一個位置 |
.replace(“”/re,””) |
替換 |
.split(“,”/”,”,2/re) |
分隔字元串,存放在數組中,第二個參數是數組大小 |
.localCompare(“”) |
比較字元串,大於1,小於-1,等於0 |
$$ |
$ |
$& |
匹配整個模式的字元串,與RfgExp.lastMatch一樣 |
$’ |
匹配子字元串之前的字元串,與RfgExp.leftContext一樣 |
$` |
匹配子字元串之前的字元串,與RfgExp.rightContext一樣 |
$n |
捕獲第n(0~9)個組的字元串,比如 text($1) |
$nn |
捕獲第n(00~99)個組的字元串 |
- 單體內置對象
encodeURI |
編碼,不包含:/?# |
encodeURIComponent |
編碼,包含特殊字元 |
decodeURI |
|
decodeURIComponent |
|
eval() |
只接受一個參數,可以創建任何變數和函數,在嚴格模式下會出錯 |
Array |
|
toString() |
數組返回字元串,項之間用,隔開,基本類型 |
valueOf() |
返回的還是數組,引用類型 |
join(“|”) |
給數組改變分隔符或其他 |
push() |
向末尾插入項 |
pop() |
取得最後一項,並移除 |
unshift() |
向數組開頭插入項 |
shift() |
取得第一項,並移除 |
concat() |
創建新的數組,裡面的參數是新加入的項 |
.slice() |
使用與String相同 |
.splice() |
1/刪除:指定兩個參數,第一個是刪除的位置,第二個是刪除的個數 2/插入:指定3個參數,第一個是插入的位置,第二個是0,之後的是插入的項,可多個用,隔開 3/提換:指定3個參數,第一個是插入的位置,第二個是1,之後的是插入的項,可多個用,隔開 |
.indexOf() |
從頭開始查找,IE9+ |
.lastIndexOf() |
從後開始查找,IE9+ |
reverse() |
反轉數組 |
迭代方法 |
|
every() |
全true則true |
some() |
有true則true |
filter() |
返回true的組成數組 |
map() |
每個項通過函數調用後的結果返回數組 |
forEach() |
沒有返回值 |
歸併方法 |
|
reduce() |
從頭遍歷到末尾,構建一個最終返回值 |
reduceRight() |
從末尾遍歷到頭,構建一個最終返回值 |
排序函數 |
|
sort() |
排序,從小到大, s.sort(compare) |
升序 |
降序 |
function compare(value1, value2) { } 使用:s.sort(compare) |
function
compare(value1, value2) { } 使用:s.sort(compare) |
- IE9+
(1) 修改屬性類型:
Object.defineProperty(對象,“對象的屬性”,{設置修改的屬性})
(2) 定義屬性:
Object.defineProperty(對象,{對象的屬性。。。})
(3) 讀取屬性的特性: x.value=取出值
var x = Object.getOwnPropertyDescriptor(對象, "對象的屬性");
工廠模式 |
用函數來封裝以特定介面創建對象 |
沒有對象識別 |
構造函數模式 |
|
直接將方法和屬性賦值給this 沒有return 沒有顯示創建對象 |
原型模式 |
prototype 1、 Fn.prototype.constructor 指向構造函數 2、 確定對象之間是否存在關係 Fn.prototype.isPrototypeOf(fn1) 3、 找到對象的原型 IE9+ Object.getPrototypeOf(fn1) 4、 屬性是存在於原型中還是實例中 fn1.hasOwnPrototype(“屬性”)【來自實例返回true、來自原型返回false】 5、 對象能夠訪問屬性 in (“屬性” in fn1);【實例和原型都返回true】 6、 for in 查看原型中和實例中的屬性 7、 Object.keys()接受一個對象作為參數,返回一個可枚舉屬性的字元串數組。 8、 不管可不可以枚舉,都列出來的話: Object.getOwnPropertyNames(Fn.prototype); |
1、屬性和方法都是實例共用的 2、如果在外面重新給對象賦值,會直接阻止訪問原型中的那個屬性,但是如果在外部將這個屬性設為null,也不會查找原型中的屬性,只有通過delete來刪除,可以重新訪問原型中的屬性 3、如果將原型改寫為對象字面量的形式,constructor指向的是Object構造函數,如果constructor很重要,那就在對象字面量中將 constructor:函數名 |
(1) 確定該屬性到底是存在於對象中,在原型中返回true,在實例中返回false
function hasPrototypeProperty(object, name){ return !object.hasOwnProperty(name) && (name in object); }
(2) 查看原型中和實例中的屬性 for in
[1] 查看原型中的屬性
var per = new Person(); for (var prop1 in per) { console.info(prop1) }
[2] 查看實例中的屬性
var o = { name: "Nicholas", age: 29, job: "Software Engineer" }; for (var prop in o) { console.info(prop) }
- 遞歸的時候arguments.callee在嚴格模式下會出錯,因此可以使用命名函數來完成:
var factorial = (function f(num){ if (num <= 1){ return 1; } else { return num * f(num-1); } });
- 閉包:是指有權訪問另一個函數作用域中變數的函數,一般是一個函數內部創建另一個函數
- 創建私有領域可以減少閉包占用的記憶體問題,而且每個開發人員可以使用自己的變數,又不用擔心搞亂全局作用域。
(function(){
//塊級作用域
})();
- 靜態私有變數
CData片段可以包含不需要被解析的任意格式的文本內容(在XHTML中用)
//<![CDATA[
//這裡放代碼
//]]>
不支持瀏覽器的<script>,使用<noscript>會執行裡面的內容
支持嚴格模式的要在IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome
函數體內可以使用arguments來訪問參數數組,從而獲取到傳給函數的每一個參數,arguments和傳給函數的參數的記憶體空間是獨立的,只是值是同步的,但是當arguments的下標超出傳給函數的參數個數的話,就會出現underfined
函數沒有重載,只會後面一個覆蓋前一個,但是根據傳入參數的個數和類型不同,可以模仿方法的重載
|
基本類型 |
引用類型 |
動態添加屬性 |
不可以,不會出錯,但會出現underfined |
可以 |
複製變數值 |
相互獨立 |
指向同一個對象,相互影響 |
傳遞參數(函數外部的值傳遞給函數內部) |
相互獨立 |
指向同一個對象,相互影響,但是在函數內部重寫的值,不會影響外部,函數已執行完就會銷毀 |
作用域鏈是保證執行環境有權訪問的所有變數和函數的有序訪問。比如標識符解析,在函數中,就是從內而外,逐級查找,直到找到標識符,如果最後找不到就會出錯。
執行環境的類型有全局和局部(函數),如果要加長作用域鏈的話,可以使用:
(1) try-catch中的catch
(2) with語句
js沒有塊級作用域,所以在if或者for語句迴圈完之後,if中的變數聲明會被提價到當前的執行環境當中,for語句的i也會在迴圈結束之後依舊存在於迴圈外部的全局環境中,即最接近的環境當中
函數聲明 |
函數表達式 |
解析器優先讀取,以便在執行任何代碼之前可以訪問 |
要等到執行到它所在的代碼行才會被執行 |
函數
arguments(對象) |
保存函數參數 |
|
callee(arguments的屬性) |
是一個指針,指向擁有arguments的函數 比如:arguments.callee(n-1)【在嚴格模式下會出錯】 |
|
this(對象) |
函數執行的環境 |
|
caller(對象的屬性) |
保存調用當前函數的函數引用 比如:arguments.callee.caller |
|
length(屬性) |
函數接受命名參數的個數 |
|
prototype(屬性) |
保存實例方法 |
|
bind(方法) IE9+ |
創建函數的實例,this的值會被綁定給傳到bind()函數的值,比如:fn.bind(o) |
|
非繼承來的方法,在特定的作用域中調用函數,強大之處在於擴充函數運行的作用域 |
||
apply() |
傳入兩個參數,第一個是運行函數的作用域,第二個是參數數組,比如: sum.apply(this, arguments)或者sum.apply(this,[n1,n2]) |
|
call() |
傳入參數,第一個是運行函數的作用域,剩下的是每一個參數
|
|
基本包裝轉換類型