1. type(null)==object ---------->實際上是javascript最初實現的一個錯誤,被ECMAScript沿用了。現在認為null是對象的預留位置,從而解決了這一矛盾,但從技術上來說,它仍是原始值。
2. Undefined 類型只有一個值,即 undefind 。當聲明的變數未初始化時,該變數的預設值是 undefined 。
3. Null 類型,只有一個專用值 null ,即它的字面量,值 undefined 實際上是從值 null 派生來的,所以 ECMAScript 把它們定義為相等,alert(null==undefined);//true
4. Number 類型,既可以表示32位的整數,也可以表示64位的浮點數。
5. 浮點字面量的有趣之處:用它進行計算前,真正儲存的是字串。
6. 特殊值:Number.MAX_VALUE 和 Number.MIN_VALUE,超出這個邊界的數不再具有數字值,產生的結果不能再用於其他計算,分別被賦予值:Number.POSITIVE_INFINITY 和 Number.NEGERTIVE_INFINITY
7. 有專門的值表示無窮大,即 Infinity (等於Number.POSITIVE_INFINITY ),-Infinity (等於 Number.NEGERTIVE_INFINITY)
8. NaN :表示非數(Not a number),一般在類型轉換失敗時,注意:其與自身不相等:alert(NaN==NaN);//false
9. toString(TYPE,[基數])、parseInt(0XA返回10)、parseFloat(只能以十進位表示,忽略前置0,0XA 返回0) ,第一個字元無效(不是數字或十六進位)就返回NaN
10. var o = new object; // var o = new object();也可以,但是為了避免混亂,最好使用括弧。
11. Object 類屬性:Constructor -----對建立對象的函數的引用,指向原始的object()函數
Prototype ------對該對象的對象的原型的引用,它預設返回Object對象的一個執行個體。
12. Boolean 類:是Boolean 原始類型的參考型別。-------> var oFalseObject = new Bloolean(false); var bResult = oFalseObject && true; //bResult等於true , 注意與Boolean原始值的區別,Boolean對象都被轉化為true
13. 沒有傳回值的函數的真正返回的都是 undefined
14. 一元加法/減法:對於數字無本質影響;但是對於字串,會把字串轉化為數字,但是:只對於以0X開頭的才轉化為10進位,以0開頭的不轉為八進位
15. 所有整數字面量,預設儲存為有符號整數,只有用ECMAScript的位元運算符才能建立不帶正負號的整數。
16. Undefined 類型進行非運算,發生錯誤
17. 邏輯AND:
一個運算數是對象,一個是Blooean型----------> 返回該對象
兩個都是對象 ------------------------------> 返回第二個對象
某個是null --------------------------------> 返回null
某個是NaN --------------------------------> 返回NaN
某個是undefined --------------------------> 發生錯誤
18. 邏輯OR:
一個運算數是對象,一個是Blooean型----------> 返回該對象
兩個都是對象 ------------------------------> 返回第一個對象
某個是null --------------------------------> 返回null
某個是NaN --------------------------------> 返回NaN
某個是undefined --------------------------> 發生錯誤
19.乘法:
某個是NaN ----------------> 結果為 NaN
Infinity * 0 ------------> 結果為 NaN
Infinity * n(非0的數) ----> 結果為 Infinity / -Infinity
Infinity * Infinity -----> 結果為 Infinity
20.除法:
某個是NaN ----------------> 結果為 NaN
n / 0 -----------------> 結果為 NaN
Infinity / n -------------> 結果為 Infinity
Infinity / Infinity -----> 結果為 NaN
21.模數:
除數為無窮大的數 ---------> 結果為被除數
其餘為 NaN 或者正常運算
22.加法:
Infinity 加(-Infinity) ------> NaN
+0 加 -0 --------------------> +0
-0 加 -0 --------------------> -0
+0 加 +0 --------------------> +0
其中有字串 ----------------> 轉化其他類型為字串在串接起來
22.減法:
Infinity 減(-Infinity) ------> Infinity
-Infinity 減(-Infinity) -----> NaN
-Infinity 減 Infinity -------> -Infinity
Infinity 減 Infinity -------> NaN
+0 減 -0 --------------------> +0
-0 減 -0 --------------------> -0
+0 減 +0 --------------------> +0
某個運算元不是數字 ----------> NaN
注意:任何包含NaN的關係運算都返回false
23. 等號和非等號
在 ECMAScript 中,等號由雙等號(==)表示,若且唯若兩個運算數相等時,它返回 true。非等號由驚嘆號加等號(!=)表示,若且唯若兩個運算數不相等時,它返回 true。為確定兩個運算數是否相等,這兩個運算子都會進行類型轉換。
執行類型轉換的規則如下:
如果一個運算數是 Boolean 值,在檢查相等性之前,把它轉換成數字值。false 轉換成 0,true 為 1。
如果一個運算數是字串,另一個是數字,在檢查相等性之前,要嘗試把字串轉換成數字。
如果一個運算數是對象,另一個是字串,在檢查相等性之前,要嘗試把對象轉換成字串。
如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。
在比較時,該運算子還遵守下列規則:
值 null 和 undefined 相等。
在檢查相等性時,不能把 null 和 undefined 轉換成其他值。
如果某個運算數是 NaN,等號將返回 false,非等號將返回 true。
如果兩個運算數都是對象,那麼比較的是它們的引用值。如果兩個運算數指向同一對象,那麼等號返回 true,否則兩個運算數不等。
重要提示:即使兩個數都是 NaN,等號仍然返回 false,因為根據規則,NaN 不等於 NaN。
運算式 值
null == undefined true
"NaN" == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
"5" == 5 true
24. label:
如: start:var iNum = 10;
break 與 continue 都可以與帶有標籤的語句聯合使用,傳回碼中的特定位置;break start;
25. with 語句:用於設定代碼在特定對象中的範圍。
它的文法:
with (expression) statement
例如:
var sMessage = "hello";
with(sMessage) {
alert(toUpperCase()); //輸出 "HELLO"
}
在這個例子中,with 語句用於字串,所以在調用 toUpperCase() 方法時,解釋程式將檢查該方法是否是本地函數。如果不是,它將檢查偽對象 sMessage,看它是否為該對象的方法。然後,alert 輸出 "HELLO",因為解釋程式找到了字串 "hello" 的 toUpperCase() 方法。
提示:with 語句是運行緩慢的代碼塊,尤其是在已設定了屬性值時。大多數情況下,如果可能,最好避免使用它。
26. 無重載:ECMAScript 中的函數不能重載,但是可以用相同的名字在同一個範圍中定義兩個函數,而不會發生錯誤,但真正使用的是最後一個函數,後面的函數的定義覆蓋了前面的函數定義。
27. arguments 對象:在函數代碼中使用特殊對象 arguments 對象,開發人員無需明確指出參數名,就可以訪問他們。ECMAScript 不會驗證傳遞給函數的參數的個數是否等於函數定義的參數個數,開發人員定義的函數都可以接受任意個數的參數。
28. Function 類:var function_name = new Function(argument1,argument2...argumentN,function_body);
例:var func_add = new Function(argument1,argument2,"alert(argument1+argument2)");
儘管可以這樣建立函數,但是這樣比傳統方式慢的多,最好不這樣做,不過,所有的函數都應看做 Function 類的執行個體。
29. 閉包(closure):函數使用函數外定義的變數。
30. 本機物件:ECMA-262 把本機物件(native object)定義為“獨立於宿主環境的 ECMAScript 實現提供的對象”。簡單來說,本機物件就是 ECMA-262 定義的類(參考型別)。它們包括: Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError等
31. 內建對象:ECMA-262 把內建對象(built-in object)定義為“由 ECMAScript 實現提供的、獨立於宿主環境的所有對象,在 ECMAScript 程式開始執行時出現”。這意味著開發人員不必明確執行個體化內建對象,它已被執行個體化了。ECMA-262 只定義了兩個內建對象,即 Global 和 Math (它們也是本機物件,根據定義,每個內建對象都是本機物件,Global對象實際上不存在,undefined、NaN、Infinity都是Global對象的屬性,所有本機物件的建構函式也都是Global對象的屬性)。
32. 宿主對象:所有非本機物件都是宿主對象(host object),即由 ECMAScript 實現的宿主環境提供的對象。所有 BOM 和 DOM 對象都是宿主對象。
33. ECMAScript 只有公用範圍:ECMAScript 中的所有對象的所有屬性和方法都是公用的。由於缺少私人範圍,開發人員確定了一個規約,說明哪些屬性和方法應該被看做私人的。這種規約規定在屬性前後加底線:obj._color_ = "blue";注意,底線並不改變屬性是公用屬性的事實,它只是告訴其他開發人員,應該把該屬性看作私人的。
34. 函數是對象,對象可以有屬性和方法。例如:
function sayHello()
{
alert("hello");
}
sayHello.alternate = function() // alternate() 是 sayHello() 公用範圍中的方法
{
alert("hi");
}
sayHello(); //輸出 "hello"
sayHello.alternate(); //輸出 "hi"
35. 關鍵字 this:它用在對象的方法中。關鍵字 this 總是指向調用該方法的對象。
36. 極晚綁定(Very Late Binding:能夠在對象執行個體化後再定義它的方法。例如:
var o = new Object();
Object.prototype.sayHi = function ()
{
alert("hi");
};
o.sayHi();
37. 繼承方式:
* 對象冒充: 建構函式使用 this 關鍵字給所有屬性和方法賦值(即採用類聲明的建構函式方式),可使 ClassA 建構函式成為 ClassB 的方法,然後調用它。ClassB 就會收到 ClassA 的建構函式中定義的屬性和方法。
ECMAScript 的第三版為 Function 對象加入了兩個方法,即 call() 和 apply():
* call()方法: 它的第一個參數用作 this 的對象。其他參數都直接傳遞給函數自身.
* apply()方法:apply() 方法有兩個參數,用作 this 的對象和要傳遞給函數的參數的數組.
* 原型鏈(prototype chaining): 實際上是把對象的所有方法複製給類的prototype對象。ClassB.prototype = new ClassA();
* 混合方式:
* 其他(庫):zInherit 庫 、xbObjectS 庫
38. getElementById();如果給定的ID匹配某個元素的name特性,IE6.0還會返回這個元素,這是一個bug,必須小心!