文章提綱 JS相關常識 JS基本概念 實踐 總結 JS相關常識 js是一種可以與HTML標記語言混合使用的腳本語言,其編寫的程式可以直接在瀏覽器中解釋執行。 一、組成 js是一種專門為網頁交互設計的腳本語言。由三部分組成:1.ECMAScript (ECMA-262定義), 提供核心語言功能2.文....
文章提綱
- JS相關常識
- JS基本概念
- 實踐
- 總結
JS相關常識
js是一種可以與HTML標記語言混合使用的腳本語言,其編寫的程式可以直接在瀏覽器中解釋執行。
一、組成
js是一種專門為網頁交互設計的腳本語言。由三部分組成:
1.ECMAScript (ECMA-262定義), 提供核心語言功能
2.文檔對象模型(DOM), 提供訪問和操作網頁內容的方法和介面
3.瀏覽器對象模型(BOM), 提供與瀏覽器交互的方法和介面
二、如何使用
HTML 中的腳本必須位於 <script> 與 </script> 標簽之間。
腳本可被放置在 HTML 頁面的 <body> 或 <head> 部分中。
內聯方式:
<script>
alert("My First JavaScript");
</script>
使用外部文件方式:
<script src="myScript.js"></script>
說明:
以前需要在script中加入type屬性:<script type="text/javascript">
現在已經不必這樣做了。
JavaScript 是所有現代瀏覽器中的預設腳本語言。
補充說明:
HTML 4.01為<script>定義了6個屬性
type -- 表示內容類型,預設為 text/javascript
src -- 源地址,可跨域
async -- 不保證按順序執行
defer -- 立即下載,延遲執行,按順序
charset -- 大多數瀏覽器忽略,很少用
language -- 已廢棄
三、語法說明
大部分和C#類似,主要有幾下幾點。
1. 聲明變數。JavaScript 是一種弱類型的腳本語言,直接用var聲明變數,變數名區分大小寫。
var message;
像這樣未經初始化的變數,會保存一個特殊的值,undefined.
var message="hi";
像這樣初始化變數並不會把它標記為字元串類型。
初始化的過程就是給變數賦一個值那麼簡單。
因此,可以在修改量值的同時修改值的類型,例如
var message= "hi";
message = 100 ; // 有效但不推薦
說明:
可不加 var 關鍵字聲明變數, 這個變數會成為全局變數, 建議總是使用var。
全局變數:
在方法外部聲明的變數;
方法內部,沒有加var關鍵字聲明的變數。
局部變數:
方法內部,使用var聲明的變數
2. 按慣例,標誌符採用駝峰格式
3. 註釋:單行和塊級
說明:塊級註釋中間的 * 非必須,建議加,提高可讀性。
4. 語句
以 ; 結尾。最佳實踐:始終在控制語句中使用代碼塊,以提高可讀性。
基本概念
數據類型
ECMAScript中, 數據類型包括5種基本類型和1種複雜類型.
基本數據類型:Number、Boolean、String、Undefined、Null
Number包括:整數和小數(最高精度17位小數)、NaN、Infinity, -Infinity
註意:
對Number來說
1.除10進位外,還可通過8進位和16進位的字面值來表示,
如 070 表示56、0xA表示10.
2.小數為浮點類型,if(0.1+0.2 == 0.3) //不要做這樣的測試,因為 浮點數值最高精度是17位,是0.300000000000000004
另外兩個特殊基本類型的說明
Undefined:表示變數聲明但未賦值.
Null : 表示一個空的對象引用(也就是賦值為null)
複雜數據類型 -- Object, 這個後續文章專門再介紹。
typeof 操作符
查看類型時,經常會使用typeof運算符, 例如 typeof(10) 返回 number類型。
完整的返回列表
返回值 |
說明 |
undefined |
未定義 |
boolean |
布爾值 |
string |
字元串 |
number |
數值 |
object |
對象或null |
function |
函數 |
說明:
1. 註意有一個特殊: typeof(null) 返回object
從邏輯角度看,null值表示一個空對象指針,因此typeof會返回object
2. undefined 類型只有一個值,即undefined
聲明未定義與未聲明的變數不一樣
尚未聲明過的變數只能執行一種操作,即使有typeof檢測其類型
理論實踐
下麵就跟著我做實驗。
基本類型
一共有以下幾種情況。
對整數來說,我們常用的一個操作就是將字元串轉變成整數。
//parseInt兩個例子
var n11 = parseInt('ab'); //NaN
var n12 = parseInt('11ab'); //11
下麵分別定義 String類型,Undefined類型,Null類型
/* 基本數據類型之String類型 */
var str = "字元串類型";
//alert(str);
/* 基本數據類型之Undefined類型 */
var n21; //表示變數聲明瞭但未被賦值
//alert(n21);
/* 基本數據類型之Null類型 */
var n31 = null; //表示空的對象引用(賦值為null)
//alert(n31);
引用類型
/* 引用數據類型 舉例 */
var obj = {}; //對象
var arr = [1, 2, 3]; //數組
var date = new Date(); //當前日期
//alert(date);
說明:
引用類型比較複雜,下麵專門講一下數組,其他引用類型後續文章會專門有一篇進行介紹。
數組常用操作, 重點
數組本身也是對象,js中數組與C#不一樣。
長度任意改變,每一項可以是不同類型。
下麵是數組操作的例子。
定義
數組可以用new的方式也可以用字面量來定義。
var arr1 = new Array();
var arr2 = [1, 2, 'aa', new Date(), true];
//alert(arr1.length);
//alert(arr2); //會自動轉換成string,效果等同於 arr2.toString()
添加和移除元素
從尾部:
//push和pop
var arr3 = [new Date(), false];
var res = arr3.push(1, 2, true); //push方法像數組中追加元素(返回值為新數組長度)
alert(arr3); //arr3中追加了1, 2, true三個元素
alert(res); //返回的是新數組的長度 5
var res2 = arr3.pop(); //從數據尾部移除一個元素,返回值為移除的元素
alert(arr3);
alert(res2); //返回值為移除的元素
從頭部:
//shift和unshift
var arr4 = [1, 2, true, new Date()];
var res4 = arr4.shift(); //從頭部移除一個元素(返回移除的元素)
var res5 = arr4.unshift(10, false); //從頭部插入多個元素,返回新數組元素個數
alert(res5);
截取
/*
splice和slice(截取相關),返回刪除的元素
splice方法操作數組本身
slice不操作數組本身
*/
var arr5 = [1, 2, 3, 4, 5];
//splice(起始位置,截取的個數,第三個參數及以後表示:插入到截取位置的新元素)
var res6 = arr5.splice(1, 2, 3, 4, 5);
//alert(arr5); //1,3,4,5,4,5
//alert(res6); //返回刪除的元素 2,3
var arr6 = [1, 2, 3, 4, 5];
var res7 = arr6.slice(2, 4); //左閉右開,語法arrayObject.slice(start,end)
//alert(arr6); //和原來一樣不變
//alert(res7); //返回刪除的元素 3,4
拼接
concat() 方法用於連接兩個或多個數組。
該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
語法:arrayObject.concat(arrayX,arrayX,......,arrayX)
//concat 和 join 都不更改原數組
var arr7 = [1, 2, 3];
var arr8 = [true, 4, 5];
var res8 = arr7.concat(arr8); //合併操作,不操作原數組本身
//alert(res8); //返回合併後的數組
var res9 = arr7.join("-"); //join() 方法用於把數組中的所有元素放入一個字元串。不傳參數使用逗號分隔
//alert(res9); //1-2-3
排序
語法:arrayObject.sort(sortby),sortby可選,規定排序順序,必須是函數。
/*
sort正序排序
reverse 倒序排序(按照原來的順序反轉)
*/
var arr9 = [1, 2, 4, 3, 5];
var arr10 = [1, 10, 2, 5, 3];
arr10.sort(); // 是按照字母來排序的 1,10,2,3,5
arr9.reverse(); //按照原來的順序反轉
document.write(arr10 + "<br />");
預設的sort是按照字母排序的,這樣 10就會排在2的前面。
我們需要自定義個比較函數作為參數,實現按數字大小排序。
如下:
function sortNumber(a, b) {
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
//document.write(arr + "<br />") // 10,5,40,25,1000,1
//document.write(arr.sort(sortNumber)) // 1,5,10,25,40,1000
說明:
比較函數sortNumber(a, b) 具有兩個參數 a 和 b,返回一個用於說明這兩個值的相對順序的數字。其返回值如下:
若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
ECMAScript5 新特性
/* ECMAScript5 數組新特性補充
位置方法:indexOf lastIndexOf
迭代方法:every filter forEach some map
縮小方法:reduce reduceRight
*/
var arr = [1, 2, 3, 4, 2, 1];
//位置方法:indexOf lastIndexOf 一個參數,表示要搜尋的元素
var index=arr.indexOf(2);
//document.write(index);
//兩個參數(要搜尋的元素,起始位置)
var index = arr.indexOf(2, 2);
document.write(index);
//lastIndexOf,用法完全一樣,只不過從尾部向前搜
var index = arr.lastIndexOf(2, 4);
document.write(index);
//迭代方法:every filter forEach some map
//every, 與運算,全是true為true
var res = arr.every(function(item, index, array) {
return item > 0;
})
//some,或運算,有一個true返回true
var res = arr.some(function (item, index, array) {
return item > 3;
})
//document.write(res);
//filter把過濾後的結果返回
var res = arr.filter(function (item, index, array) {
return item > 2;
})
//forEach,遍歷每一項執行方法
arr.forEach(function (item, index, array) {
//document.write(item+"<br/>");
})
//map, 對元素每一項執行方法,把新的結果返回
var res= arr.map(function (item, index, array) {
return item * 2;
})
//左結合和右結合方法:reduce reduceRight
var res = arr.reduce(function (prev,cur,index,array) {
return prev + cur;
})
//document.write(res);
總結
本篇首先介紹了JS相關的常識,作為學習準備。
接下來講解了JS數據類型。
數據類型是學習任何語言都必須掌握的基本概念。
著重講解了引用類型中數組的概念、特性、常用方法。
數組是最常用到的數據類型之一。
請熟練掌握數組的定義,添加和移除(從尾部push和pop;從頭部unshift和shift),截取(splice和slice),拼接(concat 和 join),排序(sort,reverse)的常用操作。
有問題歡迎直接評論提問,祝學習進步:)