JavaScript基礎文法+資料類型

來源:互聯網
上載者:User

標籤:預設   操作   迴圈   uppercase   實用   而且   過濾   java   數字   

我們都把JavaScript代碼放到<head>中
1.JavaScript代碼寫在<script>...</script>內部
2.把JavaScript代碼放到一個單獨的.js檔案,然後在HTML中通過<script src="..."></script>引入這個檔案
<script type="text/javascript">這是沒有必要的,因為預設的type就是JavaScript,所以不必顯式地把type指定為JavaScript。

但由於瀏覽器的安全限制,以file://開頭的地址無法執行如連網等JavaScript代碼,
最終,你還是需要架設一個Web伺服器,然後以http://開頭的地址來正常執行所有JavaScript代碼。

avaScript的文法和Java語言類似,每個語句以;結束,語句塊用{...}。但是,JavaScript並不強制要求在每個語句的結尾加;,瀏覽器中負責執行JavaScript代碼的引擎會自動在每個語句的結尾補上;

單行注釋 //      多行注釋 /*...*/

基礎資料類型
Number:JavaScript不區分整數和浮點數,統一用Number表示    NaN; // NaN表示Not a Number,當無法計算結果時用NaN表示    Infinity; // Infinity表示無限大,當數值超過了JavaScript的Number所能表示的最大值時,就表示為Infinity    十六進位用0x首碼和0-9,a-f表示,NaN這個特殊的Number與所有其他值都不相等,包括它自己唯一能判斷NaN的方法是通過isNaN()函數-----isNaN(NaN); // true字串是以單引號‘或雙引號"括起來的任意文本布爾值  只有true、false兩種值    &&運算是與運算    ||運算是或運算    !運算是非運算    實際上,JavaScript允許對任意資料類型做比較要特別注意相等運算子==。JavaScript在設計時,有兩種比較子:第一種是==比較,它會自動轉換資料類型再比較,很多時候,會得到非常詭異的結果;第二種是===比較,它不會自動轉換資料類型,如果資料類型不一致,返回false,如果一致,再比較。建議始終堅持使用===比較。/ 3 === (1 - 2 / 3); // false這不是JavaScript的設計缺陷。浮點數在運算過程中會產生誤差,null表示一個“空”的值,它和0以及Null 字元串‘‘不同,0是一個數值,‘‘表示長度為0的字串,而null表示“空”。undefined表示值未定義,區分兩者的意義不大。大多數情況下,我們都應該用null。undefined僅僅在判斷函數參數是否傳遞的情況下有用。undefined貌似是null的一個子類???基礎資料類型變數在JavaScript中就是用一個變數名表示,變數名是大小寫英文、數字、$和_的組合,且不能用數字開頭。在JavaScript中,使用等號=對變數進行賦值。可以把任意資料類型賦值給變數,同一個變數可以反覆賦值,而且可以是不同類型的變數,但是要注意只能用var申明一次如果一個變數沒有通過var申明就被使用,那麼該變數就自動被申明為全域變數不用var申明的變數會被視為全域變數,為了避免這一缺陷,所有的JavaScript代碼都應該使用strict模式。逸出字元\可以轉義很多字元,比如\n表示換行,\t表示定位字元,字元\本身也要轉義,所以\\表示的字元就是\。ASCII字元可以以\x##形式的十六進位表示還可以用\u####表示一個Unicode字元最新的ES6標準新增了一種多行字串的表示方法,用反引號 ` ... ` 表示要把多個字串串連起來,可以用+號串連如果有很多變數需要串連,用+號就比較麻煩。ES6新增了一種模板字串,表示方法和上面的多行字串一樣,但是它會自動替換字串中的變數var name = ‘小明‘;var age = 20;var message = `你好, ${name}, 你今年${age}歲了!`;alert(message);
基礎語言、基礎資料類型字串

JavaScript的字串就是用‘‘或""括起來的字元表示。
如果字串內部既包含‘又包含"怎麼辦?可以用逸出字元\來標識,比如:‘I\‘m \"OK\"!‘;

逸出字元\可以轉義很多字元,比如\n表示換行,\t表示定位字元,字元\本身也要轉義,所以\\表示的字元就是\。

ASCII字元可以以\x##形式的十六進位表示,例如:‘\x41‘; // 完全等同於 ‘A‘
還可以用\u####表示一個Unicode字元:‘\u4e2d\u6587‘; // 完全等同於 ‘中文‘

由於多行字串用\n寫起來比較費事,所以最新的ES6標準新增了一種多行字串的表示方法,用反引號 ` ... ` 表示:

可以用+號串連多個字串
如果有很多變數需要串連,用+號就比較麻煩。ES6新增了一種模板字串,表示方法和上面的多行字串一樣,但是它會自動替換字串中的變數:

var name = ‘小明‘;var age = 20;var message = `你好, ${name}, 你今年${age}歲了!`;alert(message);
模板字串樣本
s.length; //獲得字串的長度在js中一樣可以對字串進行索引substring()返回指定索引區間的子串//切片則使用substring    需要特別注意的是,字串是不可變的,如果對字串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果JavaScript為字串提供了一些常用方法,注意,調用這些方法本身不會改變原有字串的內容,而是返回一個新字串toUpperCase()把一個字串全部變為大寫toLowerCase()把一個字串全部變為小寫indexOf()會搜尋指定字串出現的位置在後面編寫的JavaScript代碼將全部採用strict模式。(聲明局部變數時,強制var)
操作字串數組

數組是一組按順序排列的集合,集合的每個值稱為元素。JavaScript的數組可以包括任意資料類型。
另一種建立數組的方法是通過Array()函數實現:new Array(1, 2, 3);

JavaScript的Array可以包含任意資料類型,並通過索引來訪問每個元素。
要取得Array的長度,直接存取length屬性
請注意,直接給Array的length賦一個新的值會導致Array大小的變化

var arr = [1, 2, 3];arr.length; // 3arr.length = 6;arr; // arr變為[1, 2, 3, undefined, undefined, undefined]arr.length = 2;arr; // arr變為[1, 2]
View Code

 

Array可以通過索引把對應的元素修改為新的值,因此,對Array的索引進行賦值會直接修改這個Array
請注意,如果通過索引賦值時,索引超過了範圍,同樣會引起Array大小的變化

與String類似,Array也可以通過indexOf()來搜尋一個指定的元素的位置js可以索引,但切片需要使用slice()slice()就是對應String的substring()版本,它截取Array的部分元素,然後返回一個新的Arraypush()向Array的末尾添加若干元素pop()則把Array的最後一個元素刪除掉unshift()向Array的頭部添加若干元素shift()則把Array的第一個元素刪除掉sort()可以對當前Array進行排序,它會直接修改當前Array的元素位置,直接調用時,按照預設順序排序reverse()把整個Array的元素倒序concat()方法把當前的Array和另一個Array串連起來,並返回一個新的Arrayconcat()方法可以接收任意個元素和Array,並且自動把Array拆開,然後全部添加到新的Array裡join()方法是一個非常實用的方法,它把當前Array的每個元素都用指定的字串串連起來,然後返回串連後的字串splice()方法是修改Array的“萬能方法”,它可以從指定的索引開始刪除若干元素,然後再從該位置添加若干元素var arr = [‘Microsoft‘, ‘Apple‘, ‘Yahoo‘, ‘AOL‘, ‘Excite‘, ‘Oracle‘];// 從索引2開始刪除3個元素,然後再添加兩個元素:arr.splice(2, 3, ‘Google‘, ‘Facebook‘); // 返回刪除的元素 [‘Yahoo‘, ‘AOL‘, ‘Excite‘]arr; // [‘Microsoft‘, ‘Apple‘, ‘Google‘, ‘Facebook‘, ‘Oracle‘]// 只刪除,不添加:arr.splice(2, 2); // [‘Google‘, ‘Facebook‘]arr; // [‘Microsoft‘, ‘Apple‘, ‘Oracle‘]// 只添加,不刪除:arr.splice(2, 0, ‘Google‘, ‘Facebook‘); // 返回[],因為沒有刪除任何元素arr; // [‘Microsoft‘, ‘Apple‘, ‘Google‘, ‘Facebook‘, ‘Oracle‘]
數組操作對象

avaScript的對象是一種無序的集合資料類型,它由若干索引值對組成。------就是python的字典
JavaScript對象的鍵都是字串類型,值可以是任意資料類型。

注意,最後一個索引值對不需要在末尾加,,如果加了,有的瀏覽器(如低版本的IE)將報錯。

訪問屬性是通過.操作符完成的,但這要求屬性名稱必須是一個有效變數名。如果屬性名稱包含特殊字元,就必須用‘‘括起來
xiaohong的屬性名稱middle-school不是一個有效變數,就需要用‘‘括起來。訪問這個屬性也無法使用.操作符,必須用[‘xxx‘]來訪問

訪問不存在的屬性不報錯,而是返回undefined

如果我們要檢測xiaoming是否擁有某一屬性,可以用in操作符:如果in判斷一個屬性存在,這個屬性不一定是xiaoming的,它可能是xiaoming繼承得到的

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

條件判斷

if () { ... } else { ... }

如果還要更細緻地判斷條件,可以使用多個if...else...的組合

var age = 3;if (age >= 18) {alert(‘adult‘);} else if (age >= 6) {alert(‘teenager‘);} else {alert(‘kid‘);}
樣本

請注意,if...else...語句的執行特點是二選一,在多個if...else...語句中,如果某個條件成立,則後續就不再繼續判斷了。

迴圈

for (i=1; i<=10000; i++) { x = x + i;}
i=1 這是初始條件,將變數i置為1;
i<=10000 這是判斷條件,滿足時就繼續迴圈,不滿足就退出迴圈;
i++ 這是每次迴圈後的遞增條件,由於每次迴圈後變數i都會加1,因此它終將在若干次迴圈後不滿足判斷條件i<=10000而退出迴圈。

for迴圈的3個條件都是可以省略的,如果沒有退出迴圈的判斷條件,就必須使用break語句退出迴圈,否則就是死迴圈

var x = 0;for (;;) { // 將無限迴圈下去if (x > 100) {break; // 通過if判斷來退出迴圈}x ++;}
樣本

for迴圈的一個變體是for ... in迴圈,它可以把一個對象的所有屬性依次迴圈出來:

var o = {name: ‘Jack‘,age: 20,city: ‘Beijing‘};for (var key in o) {console.log(key); // ‘name‘, ‘age‘, ‘city‘}
樣本

while迴圈只有一個判斷條件,條件滿足,就不斷迴圈,條件不滿足時則退出迴圈。

var x = 0;var n = 99;while (n > 0) {x = x + n;n = n - 2;}x; // 2500
樣本

do { ... } while()迴圈,它和while迴圈的唯一區別在於,不是在每次迴圈開始的時候判斷條件,而是在每次迴圈完成的時候判斷條件

var n = 0;do {n = n + 1;} while (n < 100);n; // 100
樣本

用do { ... } while()迴圈要小心,迴圈體會至少執行1次,而for和while迴圈則可能一次都不執行。

Map & Set

Map和Set是ES6標準新增的資料類型,請根據瀏覽器的支援情況決定是否要使用。

JavaScript的預設對象表示方式{}可以視為其他語言中的Map或Dictionary的資料結構,即一組索引值對。但是JavaScript的對象有個小問題,就是鍵必須是字串。但實際上Number或者其他資料類型作為鍵也是非常合理的。為瞭解決這個問題,最新的ES6規範引入了新的資料類型Map。Map是一組索引值對的結構,具有極快的尋找速度用JavaScript寫一個Map如下var m = new Map([[‘Michael‘, 95], [‘Bob‘, 75], [‘Tracy‘, 85]]);m.get(‘Michael‘); // 95初始化Map需要一個二維數組,或者直接初始化一個空Map。Map具有以下方法:var m = new Map(); // 空Mapm.set(‘Adam‘, 67); // 添加新的key-valuem.set(‘Bob‘, 59);m.has(‘Adam‘); // 是否存在key ‘Adam‘: truem.get(‘Adam‘); // 67m.delete(‘Adam‘); // 刪除key ‘Adam‘m.get(‘Adam‘); // undefined由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值衝掉要建立一個Set,需要提供一個Array作為輸入,或者直接建立一個空Set:var s1 = new Set(); // 空Setvar s2 = new Set([1, 2, 3]); // 含1, 2, 3重複元素在Set中自動被過濾通過add(key)方法可以添加元素到Set中,可以重複添加,但不會有效果通過delete(key)方法可以刪除元素
說明及樣本

 

JavaScript基礎文法+資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.