1.對象生成方法:javascript
var obj={}; //第一種 var obj = new Object(); //第二種
2.讀取一個屬性有兩種方法,一種是使用點運算符,一種是使用方括號運算符java
var obj = { p : 'hello world', }; o.p //點運算符 o['p'] //方括號運算符 ,鍵名必須用引號
若是o[p]則代表p是個變量,等價於o[undifined],返回undefined數組
3.上面的特性能夠用來檢查一個變量是否被聲明瀏覽器
if(a){ a+=1; } //報錯 a is not defined if(window.a){ a+=1; } //undefined
上面第二種寫法之因此不報錯,是由於在瀏覽器環境裏,全部全局變量都是瀏覽器對象window的成員,window.a的含義是讀取window裏的a屬性閉包
4.查看一個對象自己的全部屬性可使用object.keys()方法函數
var o = { key1:1, key2:'hello world' } Object.keys(o) 返回["key1", "key2"]
5.刪除一個屬性能夠用delete ,如delete o.pspa
6.若是不一樣的變量名指向同一個對象,那麼他們都是這個對象的引用,也就是說指向同一個內存地址,若是修改其中一個變量,會影響到其餘變量,這種引用值侷限於對象,對於原始數據類型則是傳值引用prototype
7.in運算符用於肯定某個屬性是否包含在對象中,也適用於數組code
8.兩種聲明一個函數的方法對象
function test(){ //... } //用function命令命名 var test = function(){ //... } //這種寫法將一個匿名函數賦值給變量,這中方式聲明函數不帶有函數名。若是加上函數名,改函數名只在函數體內部有效
9.在js中,函數與其餘數據類型處於同等地位,能夠被複制給變量和對象的屬性,也能夠看成參數傳入其餘函數,或者做爲函數的結果返回
10.函數名的提高:js引擎將函數名視同變量名,因此採用function命令聲明函數時,整個函數會被提高到代碼頭部,因此下面代碼不會報錯
f(); function f(){ //... }
當用賦值語句定義函數時,js就會報錯
f(); var f = function(){ //... }
上面的代碼等用於
var f;
f();
f = function(){
//...
}
當調用f的時候,f只是被聲明尚未被複制,等於undefined,因此會報錯,所以,若是同時採用function命令和賦值語句聲明同一個函數,最後老是採用賦值語句的定義。
11.若是屢次採用function命令重複聲明同一個函數,則後面的聲明會覆蓋前面的聲明
12.因爲函數名的提高,因此在條件語句中聲明函數是無效的
13.函數對象的length屬性,返回函數定義所需的參數個數
14.爲函數的參數設置默認值
function test(a){ (a !== undefined && a! == null) ? (a=a) : (a=1); return a; }
會被認爲是false的值: undefined , null , false , +0 , -0 , ''
15.arguments對象包含了函數運行時全部參數,arguments[0]表示第一個參數,arguments[1]表示第二個參數,以此類推,這個對象只有在函數體內部才能使用
須要注意的是:雖然這個對象很像數組,但它是一個對象,解決辦法以下:
var args = Array.prototype.slice.call(arguments); //or var args = []; for(var i=0;i < arguments.length;i++){ args.push(arguments[i]); }
該對象還有一個callee屬性,返回它所對應的原函數名稱
16.閉包(closure)就是定義在函數體北部的函數
function f(){ var v = 1; var c = function(){ return v; }; return c } var o = f(); o(); //返回1
閉包的特色在於c函數能夠獲取函數f的內部變量
17.當即調用的函數表達式(IIFE)