javascript學習筆記---9月23日

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)

相關文章
相關標籤/搜索