參考 《JavaScript 高級程序設計(第3版)》
<script>
1、<script> 標籤加載外部 JS :
1)defer="defer" :延遲腳本,腳本立即下載,但延遲執行,按順序執行。
2)async="async" :異步腳本,腳本立即下載,但延遲執行,順序不定。
注:實現 JS 異步的另一個方法是動態創建 <script>
文檔模式
2、文檔模式:混雜模式和標準模式。(主要是影響 CSS,但會對部分 JS 有影響)
1)混雜模式:令 IE 的行爲與 IE5 相同,以此來解析渲染頁面。
2)標準模式:讓 IE 的行爲更接近標準行爲。
3、嚴格模式:在腳本頂部添加 "use strict"; 用於處理 ECMAScript 3 中一些不確定的行爲,並對某些不安全的操作拋出錯誤。
注:ECMAScript 5 引入的,支持 IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome
基本數據類型
4、5 種基本數據類型:Undefined、Null、Boolean、Number、String
注:另外是 1 種複雜數據類型:Object
5、typeof 操作符:返回:"undefined"、"boolean"、"string"、"number"、"object"(對象或null)、"function"(函數)
6、Undefined 類型:只有一個值,即是 undefined。當使用 var 聲明卻未初始化時,賦值 undefined
7、Null 類型:只有一個值,即是 null。表示空對象指針。typeof 返回 object。
注:null == undefined; // true
8、Boolean 類型:兩個值,即是 true 和 false。
1)Boolean() 方法:參數是需要轉換的值,轉換爲 Boolean 類型,undefined 只能轉換爲 false
9、Number 類型:最大值 Number.MAX_VALUE ,最小值 Number.MIN_VALUE
1)Number() 方法:參數是需要轉換的值,true 轉爲 1;false 轉爲 0;null 轉爲 0;undefined 轉爲 NaN;空串轉爲 0;字符串只能包含數字才能轉換;其他轉爲 NaN。
2)parseInt() 方法:參數是需要轉化的值和基數,與 Number 方法不同的是,只要字符串是以數字或負號開頭的都能轉換;空串轉爲 NaN。
使用時通常會指定基數,如十進制:parseInt("2356" , 10);
3)parseFloat() 方法:參數是需要轉化的值,轉爲浮點數。
4)toFixed() 方法:點調用,參數是小數位,四捨五入,並保留指定小數位。
注:0.1 + 0.2 == 0.3; // false
10、NaN:非數值。用 isNaN() 方法判斷能否轉換爲數值。
注:涉及 NaN 的操作都會返回 NaN;NaN 與任何值都不等,包括自身。
String 類型
11、String 類型:
1)toString() 方法:點調用,無參數,null 和 undefined 沒有 toString 方法,不可調用,否則會出錯。
2)String() 方法:參數是需要轉化的值,如果有 toString 方法則調用,若沒有則 null 會返回 "null",undefined 會返回 “undefined”
3)length 屬性:返回字符串包含的字符個數。
4)charAt() 方法:點調用,參數是下標,返回指定位置的字符。
5)slice() 方法:點調用,參數是起始位和終止位,返回子串,不包含終止位的字符。終止位可以不指定。參數爲負數時,與長度相加。
6)substring() 方法:點調用,參數是起始位和終止位,返回子串,不包含終止位的字符。終止位可以不指定。參數爲負數時,變成0。
7)substr() 方法:點調用,參數是起始位和字串位數,返回子串。終止位可以不指定。參數爲負數時,第一個與長度相加,第二個變成0。
8)indexOf() 方法:點調用,參數是子串,返回子串的位置。
9)lastIndexOf() 方法:點調用,參數是子串,從末尾搜索,返回子串的位置。
10)trim() 方法:點調用,無參數,刪除前後空格符,返回刪除後的字符串,不修改原來的字符串。
11)toLowerCase() 方法和 toUpperCase() 方法:點調用,無參數,轉換大小寫,返回轉換後的字符串,不修改原來的字符串。
12)match() 方法:點調用,參數是正則表達式,返回一個數組。格式是:字符串.match(正則式);
13)exec() 方法:點調用,參數是字符串,返回一個數組。格式是:正則式.exec(字符串);
14)match VS exec :在全局模式下,match 返回的數組可能有多項,但 exec 返回的數組都只有一項;
在全局模式下,lastIndex 在每次調用 exec 後都會增加,而match 始終爲0。
15)search() 方法:點調用,參數是正則表達式,返回第一個匹配項的索引。格式是:字符串.search(正則式);
16)replace() 方法:點調用,參數有兩個,第一個是希望被替換的子串或正則表達式,第二個是替換的子串或函數。
如果第一個是字符串,則只替換第一個匹配的子串;如果是正則表達式,則會替換所有匹配的子串。
如果第二個是函數,則可以按照匹配項的不同對其進行替換。例:
//對 <、>、&、" 進行轉義
function strReplace(str){
return str.replace(/[<>"&]/g, function(match, pos, originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
case "\"":
return "&";
case "&":
return """;
}
});
}
17)split() 方法:點調用,參數是分隔符。返回分割的子串組成的數組。
18)localeCompare() 方法:點調用,參數是另一個字符串。比較兩字符串,若排在參數字符串之前,則返回負數;若倆字符串一樣,返回0;若排在參數後面,返回正數。
補充:控制檯輸出、for-in
12、控制檯輸出:console.log() 。格式化:%s:字符串;%d:整型;%f:浮點型
13、for-in 語句:
var person = {
"name" : "a",
"age" : 18
};
for(var propoty in person){
alert(person[propoty]); //"a" "18"
}
注:for-in 語句中,propoty 是對應對象的屬性名,而非屬性值。也就是如果對象是數組,那麼 propoty 對應數組的下標。Function 類型
14、Function 類型:函數是對象,函數名是指針
1)函數聲明語法:函數聲明可以放在調用之後
function funName ( arg1, arg2, ...){
//function body
}
2)函數表達式法:函數表達式必須放在調用之前
var funName = function ( arg1, arg2, ...){
//function body
}; //以分號結尾
4)函數內部屬性 arguments:
調用函數時,傳入的函數參數的類型,數量不會受到函數聲明的限制。
arguments 對象(並非 Array 實例)用於存儲傳入的所有參數。
arguments.length 表示傳入的參數的個數;而 funName.length 表示函數定義時希望傳入的參數的個數。
在非嚴格模式中,修改 arguments 的某個值,會與傳入的命名參數保持同步。
function sum (a , b){
argument[0] = 20;
return a + b;
}
alert(sum(1,2)); //22 注:若使用 "use strict"; 則依然是3
arguments.callee:指針,執行函數對象,也就是相當於函數名。(常用於遞歸調用,使得遞歸函數的函數體與函數名無關)
5)函數內部屬性 this:指針,指向函數當前的執行環境。
全局作用域中調用函數時,this 對象引用的是 window; 若函數作爲某對象的方法,則 this 指向該對象。
6)函數內部屬性 caller:保存調用當前函數的函數的引用,也就是調用當前函數的函數名,若全局作用域中調用當前函數,則值爲 null。ECMAScript 5 規範化。
注:嚴格模式中訪問會出錯。
7)length 屬性:表示希望接收的參數的個數。
8)prototype 屬性:用於保存實例方法。
9)apply() 方法:點調用,參數有兩個,第一個是運行函數的作用域,第二個是參數數組(可選)(可以是 arguments 或其他 Array 實例)
10)call() 方法:點調用,參數有兩個,第一個是運行函數的作用域,第二個是各個參數的值(可選)
11)apply 和 call 的作用主要是擴充函數的作用域:這樣的好處是不需要對象與方法之間有任何的耦合關係。
var a = 1;
var b = { a : 2};
function sayA(){
alert(this.a);
}
sayA(); // 1
sayA.call(window); //1
sayA.call(b); // 2
sayA.apply(b); // 2
單體內置對象 Global 、Math
15、單體內置對象 Global:不屬於任何對象的屬性和方法,都是屬於 Global,如:isNaN()、parseInt()、parseFloat() 等URI 編碼方法
1)URI 編碼方法:
encodeURI() :參數是某個 uri 。不會對特殊字符進行編碼,如冒號、問號等。也就是除了空格被編碼爲 %20 外,其他原封不動。對應的 decodeURI() 用於解碼。
encodeURIComponent() :參數是某個 uri 。會對所有的特殊字符進行編碼。對應的 decodeURIComponent() 用於解碼。
2)eval() 方法:參數是 ECMAScript 語句字符串,直接執行該語句,然後將結果插入原來的位置。
16、單體內置對象 Math:
1)Math.min() 和 Math.max() 方法:可傳入多個數值參數,返回最值。
2)Math.ceil() 方法:參數是一個數值,向上取整
Math.floor() 方法:參數是一個數值,向下取整
Math.round() 方法:參數是一個數值,四捨五入取整
3)Math.random() 方法:無參數,返回一個隨機數 r,0 <= r < 1
17、垃圾收集機制:大部分採用 標記清除:即是當變量進入環境時標記“進入環境”;當離開時標記“離開環境”,表示準備刪除。垃圾收集器根據標記完成內存清除工作。
Object 類型
18、Object 類型:
1)調用構造函數創建實例:
var obj = new Object();
obj.name = "a";
obj.age = 18;
2)使用字面量創建實例:
var obj = {
name : "a", //注意逗號;屬性名可以是用引號,也可以不用
age : 18
}; //注意分號
3)instanceof 操作符:變量 instanceof 引用類型 :用於判斷是否是某個對象
Array 類型
var a = new Array(); //空數組
var b = new Array(3); //有3個項
var c = new Array(1,2,3); //初始化各個項
2)使用字面量創建實例:var a = []; //空數組
var b = [1,2,3];
3)length 屬性:令 length = 0 則可以達到清空數組的目的;給 length 賦值:若比原來大則會擴充數組,新的項值都是 undefined;若比原來小,則會刪除多餘的項。5)toString()、toLocaleString()、valueOf() 方法:點調用,無參數,返回數組的各個項組成的字符串,中間以逗號分隔
var a = [1,2,3,4,5,6,7,8,9];
//看數組是否每一項都大於5。不改變原數組。
var everyResult = a.every(function(item, index, array){
return (item > 5);
}); //false
//返回大於5的項組成的數組。不改變原數組。
var filterResult = a.filter(function(item, index, array){
return (item > 5);
}); //6,7,8,9
//將每一項加1組成新的數組。不改變原數組。
var mapResult = a.map(function(item, index, array){
return item + 1;
}); //2,3,4,5,6,7,8,9,10
//看數組中是否存在大於5的項。不改變原數組。
var someResult = a.some(function(item, index, array){
return (item > 5);
}); //true
//輸出數組的每一項
a.forEach(function(item, index, array){
console.log(item);
});