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,如需轉載請自行聯系原作者