JavaScript 學習筆記(一)

1.javascript中,值包括原始值對象,原始值包括布爾值、數字、字符串、null和undefined,其餘的值爲對象。javascript

  原始值的特色:(1)按值進行比較:3===3> true; 'abc'==='abc'> true      java

                     (2)屬性不能改變、添加和移除  var src='abc'; str.length=1; str.length> 3   str.foo=3; str.foo> undefined正則表達式

  對象:包括簡單對象、數組、正則表達式,特色:(1)按引用進行比較 {}==={}> false      var obj1={}; var obj2=obj1; obj1===obj2> true數組

                                                               (2)屬性能夠自由被改變、添加和移除  var obj={}; obj.foo=123; obj.foo> 123閉包

2. undefined:沒有值,未被初始化的變量即爲undefined,丟失的參數,訪問不存在的屬性ide

  null:沒有對象,表示空值函數

 undefined和null沒有屬性,也沒有方法, 可被看作falsespa

3. 對值分類:typeof和instanceofcode

                 typeof主要用於原始值,instanceof主要用於對象對象

                 typeof undefined> 'undefined'  typeof null> object ,可是null不是一個對象

                 null instanceof object> false   undefined insteanceoof object> false

 4. 被解釋爲false的值:undefined、null、false、0、NaN、'' ,其餘值被解釋爲true

 5. &&:能夠返回布爾值,也可爲其餘值,若是第一個運算數是的,返回它,不然返回第二個運算數 NaN&&'abc'> NaN  123&&'abc'> 'abc'

      ||: 能夠返回布爾值,也可爲其餘值,若是第一個運算數是的,返回它,不然返回第二個運算數 'abc'||123> 'abc'  ''||123> 123

6. 全部的數字都是浮點數 1===1.0> true, 還有特殊的數字:NaN,Infinity, Infinity比任何數字大(除了NaN),-Infinity比任何數小(除了NaN)

7. 函數聲明具備提高特性—它們的實體會被移動到所在做用域的開始處。這使得咱們能夠引用後面聲明的函數。

  function foo(){

                    bar();  //Ok

                   function bar(){

                            }

            }

 

       注意,var 聲明賦值不具有該特性,

               function foo(){

                          bar(); //Not OK

                          var bar=function(){

                                   }

                      }

 

   8. 函數內的arguments不是數組,只是相似數組,有length屬性,能夠經過[]訪問每一個參數,可是不能對它調用數組的方法, 能夠經過toArray()方法將它變爲數組

   9.  一個變量的做用域老是完整的函數:

1 function foo(){ 
2        var x=-1;
3        if(x<0)
4          {
5             var tmp=-x;
6         }
7      console.log(tmp); // 1
8 }

 10. 全部的變量聲明都會被提高,聲明會被移動到函數的開始處,而賦值還在原來的位置進行

function foo(){

  console.log(tmp);// undefined

  if(false)
  {
      var tmp=3;
  }
}

 

 11. 閉包:每一個函數和它周圍的變量保持着鏈接,哪怕離開被建立時的做用域也是如此。函數以及它所鏈接的周圍做用域中的變量即爲閉包。 

function foo(s){
       return function(){
               s++;
               return s;
    }
}

 var inc=foo(5);
 inc();// 6
 inc();//7
 inc();//8
 

 

12.  IIFE模式(當即調用表達式):引入新的做用域 , 防止一個變量變成全局變量

(function(){   //開啓IIFE
   
     var tmp=...;// 非全局變量
  
}());

 

   用例:解決閉包形成的無心共享

result=[];
for(var i=0;i<5;i++)
{
  (function(){
      var i2=i; //複製i
      result.push(function(){ return i2});

   }();)

}


console.log(result[1]());//1
console.log(result[3]());//3

 

 13. 兩種面向對象機制:單一對象和構造函數

       對象能夠認爲是一組屬性的集合,使用in 運算符檢查屬性是否存在,使用delete運算符移除屬性

       任意屬性名:使用引號括起來,用方括號獲取和設置

var obj={'not a identifier': 123};

>obj['not a identifier']
    123
>obj['not a identifier']=456;

//方括號能夠動態計算
>obj['not a'+'identifier']
   123

 

 14. var func2=obj.func.bind(obj);  //使用bind()方法提取一個對象中的方法

相關文章
相關標籤/搜索