天天看點

JavaScript學習記錄day2

JavaScript不區分整數和浮點數,統一用Number表示,以下都是合法的Number類型:

計算機由于使用二進制,是以,有時候用十六進制表示整數比較友善,十六進制用0x字首和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等,它們和十進制表示的數值完全一樣。

Number可以直接做四則運算,規則和數學一緻:

注意%是求餘運算。

基本用法和python一樣。

ASCII碼:

Unicode字元:

多行字元串: 

由于多行字元串用\n寫起來比較費事,是以最新的ES6标準新增了一種多行字元串的表示方法,用反引号 <code>...</code> 表示:

模闆字元串:

字元串長度:

要擷取字元串某個指定位置的字元,使用類似Array的下标操作,索引号從0開始:

需要特别注意的是,字元串是不可變的,如果對字元串的某個索引指派,不會有任何錯誤,但是,也沒有任何效果:*

JavaScript為字元串提供了一些常用方法,注意,調用這些方法本身不會改變原有字元串的内容,而是傳回一個新字元串:

toUpperCase 

toUpperCase()把一個字元串全部變為大寫:

toLowerCase 

toLowerCase()把一個字元串全部變為小寫:

indexOf 

indexOf()會搜尋指定字元串出現的位置:

substring 

substring()傳回指定索引區間的子串:

<code>false/true</code>

當我們對Number做比較時,可以通過比較運算符得到一個布爾值:

實際上,JavaScript允許對任意資料類型做比較:

要特别注意相等運算符<code>==</code>。JavaScript在設計時,有兩種比較運算符: 

第一種是<code>==</code>比較,它會自動轉換資料類型再比較,很多時候,會得到非常詭異的結果; 

第二種是<code>===</code>比較,它不會自動轉換資料類型,如果資料類型不一緻,傳回false,如果一緻,再比較。

由于JavaScript這個設計缺陷,不要使用<code>==</code>比較,始終堅持使用<code>===</code>比較。

另一個例外是NaN這個特殊的Number與所有其他值都不相等,包括它自己:

唯一能判斷NaN的方法是通過isNaN()函數:

最後要注意浮點數的相等比較:

這不是JavaScript的設計缺陷。浮點數在運算過程中會産生誤差,因為計算機無法精确表示無限循環小數。要比較兩個浮點數是否相等,隻能計算它們之差的絕對值,看是否小于某個門檻值:

null表示一個“空”的值,它和0以及空字元串”不同,0是一個數值,”表示長度為0的字元串,而null表示“空”。

在其他語言中,也有類似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,還有一個和null類似的undefined,它表示“未定義”。

JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這并沒有什麼卵用,區分兩者的意義不大。大多數情況下,我們都應該用null。undefined僅僅在判斷函數參數是否傳遞的情況下有用。

寫法和python中清單一樣。 

數組是一組按順序排列的集合,集合的每個值稱為元素。JavaScript的數組可以包括任意資料類型。例如: 

<code>[1, 2, 3.14, 'Hello', null, true];</code> 

上述數組包含6個元素。數組用[]表示,元素之間用,分隔。

另一種建立數組的方法是通過Array()函數實作: 

<code>new Array(1, 2, 3); // 建立了數組[1, 2, 3]</code> 

然而,出于代碼的可讀性考慮,強烈建議直接使用<code>[]</code>。

數組的元素可以通過索引來通路。請注意,索引的起始值為0:

JavaScript的Array可以包含任意資料類型,并通過索引來通路每個元素。

數組長度 

要取得Array的長度,直接通路length屬性:

修改數組 

請注意,直接給Array的length賦一個新的值會導緻Array大小的變化:

Array可以通過索引把對應的元素修改為新的值,是以,對Array的索引進行指派會直接修改這個Array:

請注意,如果通過索引指派時,索引超過了範圍,同樣會引起Array大小的變化:

大多數其他程式設計語言不允許直接改變數組的大小,越界通路索引會報錯。然而,JavaScript的Array卻不會有任何錯誤。在編寫代碼時,不建議直接修改Array的大小,通路索引時要確定索引不會越界。

與String類似,Array也可以通過indexOf()來搜尋一個指定的元素的位置:

注意了,數字30和字元串’30’是不同的元素。

slice 

slice()就是對應String的substring()版本,它截取Array的部分元素,然後傳回一個新的Array:

注意到slice()的起止參數包括開始索引,不包括結束索引。

如果不給slice()傳遞任何參數,它就會從頭到尾截取所有元素。利用這一點,我們可以很容易地複制一個Array:

push和pop 

push()向Array的末尾添加若幹元素,pop()則把Array的最後一個元素删除掉:

unshift和shift 

如果要往Array的頭部添加若幹元素,使用unshift()方法,shift()方法則把Array的第一個元素删掉:

sort 

sort()可以對目前Array進行排序,它會直接修改目前Array的元素位置,直接調用時,按照預設順序排序:

能否按照我們自己指定的順序排序呢?完全可以,我們将在後面的函數中講到。

reverse 

reverse()把整個Array的元素給掉個個,也就是反轉:

splice 

splice()方法是修改Array的“萬能方法”,它可以從指定的索引開始删除若幹元素,然後再從該位置添加若幹元素:

concat 

concat()方法把目前的Array和另一個Array連接配接起來,并傳回一個新的Array:

請注意,concat()方法并沒有修改目前Array,而是傳回了一個新的Array。 

實際上,concat()方法可以接收任意個元素和Array,并且自動把Array拆開,然後全部添加到新的Array裡:

join 

join()方法是一個非常實用的方法,它把目前Array的每個元素都用指定的字元串連接配接起來,然後傳回連接配接後的字元串:

如果Array的元素不是字元串,将自動轉換為字元串後再連接配接。

多元數組

如果數組的某個元素又是一個Array,則可以形成多元數組,例如:

上述Array包含3個元素,其中頭兩個元素本身也是Array。

對象 

寫法和python中字典類似,對象屬性的用法和python類屬性的用法一樣。 

JavaScript的對象是一組由鍵-值組成的無序集合,例如:

JavaScript對象的鍵都是字元串類型,值可以是任意資料類型。上述person對象一共定義了6個鍵值對,其中每個鍵又稱為對象的屬性,例如,person的name屬性為’Bob’,zipcode屬性為null。

要擷取一個對象的屬性,我們用對象變量.屬性名的方式:

由于JavaScript的對象是動态類型,你可以自由地給一個對象添加或删除屬性:

如果我們要檢測xiaoming是否擁有某一屬性,可以用in操作符:

不過要小心,如果in判斷一個屬性存在,這個屬性不一定是xiaoming的,它可能是xiaoming繼承得到的:

因為toString定義在object對象中,而所有對象最終都會在原型鍊上指向object,是以xiaoming也擁有toString屬性。

要判斷一個屬性是否是xiaoming自身擁有的,而不是繼承得到的,可以用hasOwnProperty()方法:

變量 

var隻能聲明一次,變量本身類型不固定。javascripts屬于動态語言。 

strict模式

本文轉自 ygqygq2 51CTO部落格,原文連結:http://blog.51cto.com/ygqygq2/1918191,如需轉載請自行聯系原作者