JavaScript深入淺出學習筆記

JavaScript六種數據類型

  1. 隱式轉換

 

+  :當兩個變量分別爲數字和字符串時,默認爲字符串拼接。

-  :默認爲減法運算

 

 

Eg:32+32 ——>64

“32”+32——>”3232”

“32”-”32”——>0

 

運用技巧:num+”” 可將number類型的num轉換爲string類型

  num-0可將string類型的num轉換爲number類型

 

  1. 數據類型

 

原始類型:number, string, boolean, null ,undefined, object,

 

Object中又包括:function,array,Date...

 

  1. 等於
  1. “1.23”==1.23 :當等號兩邊一邊爲字符串一邊爲數字時,會嘗試把字符串轉換爲數字,  再進行比較。
  2. 0==false
  3. 一邊是boolean一邊是數字,會先把boolean轉換成數字再做比較。1==true——>true
  4. object==number|string嘗試將對象轉換爲基本類型(方法後面會講,包裝類)再比較 new String(‘hi’)==’hi’——>true
  5. Null==undefined
  6. new Object()==new Object()
  7. [1,2]==[1,2]

 

  1. 嚴格等於
  1. a===b :首先會判斷等號左右兩邊的類型,如果類型不同,則返回false。
  2. null===null
  3. undefined===undefined
  4. NaN===NaN——>false
  5. new Object()===new Object()——>false不是兩個完全相同的對象
  6. [1,2]===[1,2]——>false 不是兩個完全相同的對象

 

 

 

 

 

  1. JaaScript包裝對象

 

String是一個字符串類型,而new string()則是一個對象類型,在對string類型的字符串做.length操作時,可以獲取其長度,在對string類型的字符串設置屬性時,也不會報錯,原因是在對字符串類型的變量做這些操作時,會將當前字符串轉換爲一個object類型的變量,並設置相應屬性,而當屬性設置完畢,這個臨時變量就會消失,因此再次調用這個變量時,會得到undefined的結果。(將一個基本類型的變量按照對象的方式去使用時,將該變量轉換爲包裝類型的臨時對象,完成訪問之後即刻銷燬。

 

  1. JaaScript類型檢測
  1. typeof():多用於判斷基本類型或函數對象,返回值是一個字符串(“string”,”number”,”boolean”,”undefined”...)記住typeof(null)===object
  2. Instanceof 多用於判斷對象的類型,專門根據原型鏈判斷類型。

對象 instanceof 函數對象或函數構造器   如果右邊類型不符的話就會拋出

typeerror異常,(判斷左邊的左操作數對象的原型鏈上,是否有右邊這個構造

prototype屬性)

Eg:  [1,2] instanceof Array===true

     New Object() instanceof Array===false

  1. Object.prototype.toString()

Eg: Object.prototype.toString.apply([])===”[object Array]”

   Object.prototype.toString.apply(function(){})===”[object Fuction]”

 

 

  1. 判斷兩個數組是否相等,可將兩個數組的toString()相比較。

 

 

 

 

 

 

 

 

JavaScript表達式

  1. 逗號表達式,一次從左到右計算表達式,最後結果取最右邊的:

var val=(1,2,3) // val=3

  1. num=’12’

num=+num

num=12

+num可以把字符串轉換爲數字

  1. delete運算符:操作對象,可通過configurable  控制對象中的元素是否可被刪除

var obj={x:1};    delete obj.x;     obj.x//undefined

  1.  運算符in:判斷一個對象中是否有某個屬性

 

 

 

JavaScript語句

  1. try catch語句:try後面必須跟着一個catch或finally

try(){

//正常語句

throw new Error(“opps”)

}catch(ex){

//發生異常捕獲,並執行的語句,若沒有發生異常,此段代碼會被忽略掉

}finally{

//不管有沒有發生異常,該語句都會執行

}

Eg1:

當try後面沒有catch時,會跳到外層執行距離最近的catch裏面語句,但是在這之前,需要先執行當前try語句後的finally語句,因此最終執行結果如上圖。

 

Eg2:

 

 

 

 

 

 

 

Eg3:

 

當catch內部再一次拋出異常時,會先執行當前同級的finally語句,再將catch中拋出的異常拋到下一層catch語句中執行。

 

 

  1. Switch語句:

  1. 嚴格模式

JavaScript對象

  1. 屬性標籤
  1. value:屬性的值
  2. writable:當前屬性是否可寫。
  3. enumerable:當前屬性時否可遍歷(可枚舉)。在for in時是否會被遍歷出來。
  4. configurable:屬性標籤是否可以被修改,當前屬性是否可以被delete。

 

 

  1. 序列化

 

1、JSON.stringify中注意的問題(json.stringify叫做“序列化”

當對象中的屬性的值爲undefined時,在json.stringify後的結果中不會出現該項屬性。

  1. 反向對應爲JSON.parse()
  2. 自定義序列化,在需要處理的對象屬性內部定義一個方法屬性toJSON,在函數內部做處理,此時的this指的是當前被操作的屬性。

 

JavaScript數組

1、數組的長度最大爲2的23次方-1

  1. 在數組的第一位添加元素的方法爲arr.unshift(添加的元素)
  2. delete arr[2]是把數組的下標爲2的元素置爲undefined,該元素的位置仍然在。
  3. arr.pop()刪除數組的最後一個元素
  4. arr.shift()刪除數組的第一個元素
  5. 判斷一個數組中是否存在某個索引用,num in arr,返回值爲true/false,其中num                     爲索引值,當索引位置的元素爲undefined時,會返回false
  6. 數組的操作

(1)join():將數組轉換爲字符串,join的參數爲數組間元素的分隔符。

(2)reverse():數組逆序。(原數組被修改)

(3)sort():排序。(按照轉換爲字符串排序,當數組中元素爲數字,且爲兩位以上事,需要藉助函數排序)

eg:arr.sort(function(a,b){return a-b})(由小到大排序,原數組被修改)

  1. concat():數組合並,原數組未被修改。

特殊:var arr=[1,2,3]

arr.concat([4,5,[6,7]])

結果:[1,2,3,4,5,[6,7]]

arr.concat([10,11],13)

結果:[1,2,3,10,11,13]

會將concat的元素的中括號打開一層再concat進去。

(5)slice():返回部分數組,(原數組不會被修改)兩個參數,第一個參數,起始位置,第二個參數,終止位置,包前不包後,當沒有第二個參數時,默認到結尾。

(6)splice(a,b):刪除數組的一部分(會改變原數組)。a:要刪除元素的起始下標(包含),b:要刪除元素的個數。返回值爲被刪除的數組片段。

(7)arr.forEach():

 

 

 

  1. arr.map()遍歷數組

  1. arr.filter():

      

  1. arr.every():判斷數組中每一個元素都滿足某個條件。arr.some()判斷數組中是否存在某個元素滿足某個條件。返回true/false。

  1. arr.reduce():將數組中的元素進行兩兩操作。

其中的0,是第一次傳入的時候,第一次的x的值。再把第一次得到的結果當成下一次的X傳進去。

  1. arr.reduceRight():用法和上面一致,但是執行時從右向左執行數組中的元素。
  2. arr.indexOf(元素,起始下標):查找元素的位置,返回元素的下標。若未找到,則返回-1。
  3. arr.lastIndexOf(元素,起始下標):元素最後一次出現的位置。
  4. 判斷一個變量是否爲數組:

Array.isArray(被判斷變量); // true/false

 

 

JavaScript函數

  1. 函數聲明與表達式

函數聲明會被提前,而函數表達式不會。

  1. this

對象原型鏈上的this:對象o在p的原型鏈上p是{},但原型鏈上存在prop屬性

 

如果函數返回的是一個對象時,此時通過new出來的對象中的this爲return回的對象。

call,apply,bind:改變this的指向,區別是傳參形式不同。

 

 

  1. 函數屬性arguments
  1. arguments爲函數的參數數組,當函數被調用傳入參數時,arguments被賦值,此時arguments爲被傳入的參數,但在函數內部可對arguments進行賦值,此時arguments會被改寫,改寫的結果會影響函數的結果,但若在傳參時並沒有給對應的參數賦值,則在函數內部對未被傳參的參數賦值是無效的,還是會返回undefined。

 

 

  1. arguments.callee===當前函數名。多用於遞歸函數,使函數不用受到名稱的限制,通過arguments.callee即可調用本身。
  2. call、apply、bind的第一個參數爲this的指向,是個對象,若不是對象則會被轉成對象。若this被指向null或undefined,則默認this會指向全局對象window(對於瀏覽器是window,對於nodejs就是global對象)。(若是在嚴格模式下,this傳入什麼就是什麼,也不會轉換成對象了)

  1. bind與currying

1、適用場景:當函數中某幾個參數是固定的,但其他參數是在改變的,可以用bind先將其他參數固定,再只給其他參數傳值。

2、當使用new時,若return回來的不是對象,則會return this,且此時this會被初始化爲一個空對象,他的原型是foo.prototype,雖然此時使用了bind改變了this的指向,但是由於使用new,所以this還是指向一個空對象,由於設置了this屬性b,因此會返回一個帶有屬性b的對象。

JavaScript理解閉包、作用域

JavaScript OOP(面向對象編程)

  1. 改變prototype

當一個對象實例化之後,去改變它的原型對象,不會影響當前實例的屬性,但是會影響後續創建的實例。Bosn是student的實例。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章