概述
JavaScript是世界上最流行的腳本語(yǔ)言,是一種運(yùn)行在瀏覽器中的解釋型的編程語(yǔ)言,能夠?qū)崿F(xiàn)跨平臺(tái)、跨瀏覽器。雖然只是十多天時(shí)間的產(chǎn)物,并且有很多的缺陷和陷阱,但也造就了JavaScript的靈活和強(qiáng)大。隨著Node.js的興起,JavaScript已經(jīng)從單純實(shí)現(xiàn)前端互動(dòng),發(fā)展到可以全棧實(shí)現(xiàn)整個(gè)應(yīng)用。尤其是在移動(dòng)互聯(lián)網(wǎng)蓬勃發(fā)展以及應(yīng)用追求極致用戶體驗(yàn)的今天,JavaScript更是必須要重視和掌握的。
變量
使用var關(guān)鍵字進(jìn)行變量的聲明,聲明的同時(shí)也可以進(jìn)行賦值。變量的聲明只能有一次,但賦值可以有多次。如果只聲明變量,但是變量沒(méi)有被賦值,此時(shí)變量的值為undefined。
JavaScript變量的類型取決于右側(cè)的對(duì)象。
var variable_name1 = 5;
var variable_name2 = 5.3;
var variable_name3 = false;
var variable_name4 = 'zhangsan';
變量的作用域
JavaScript沒(méi)有塊級(jí)作用域
java:
if(true) {
int a = 1;
}
System.out.println(a); // 編譯錯(cuò)誤,超出作用域
javascript:
if(true){
var a = 1;
}
console.log(a); // 1 JavaScript沒(méi)有塊級(jí)作用域
JS中的六大數(shù)據(jù)類型
js中有六種數(shù)據(jù)類型,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null),和3種引用數(shù)據(jù)類型(Object,Function,Array)。
基本數(shù)據(jù)類型
1.Number類型
Number類型包含整數(shù)和浮點(diǎn)數(shù)(浮點(diǎn)數(shù)數(shù)值必須包含一個(gè)小數(shù)點(diǎn),且小數(shù)點(diǎn)后面至少有一位數(shù)字)兩種值。
2.String類型
單引號(hào)或雙引號(hào)擴(kuò)起來(lái)的字符集合
3.Boolean類型
該類型只有兩個(gè)值,true和false
4.Undefined類型
只有一個(gè)值,即undefined值。使用var聲明了變量,但未給變量初始化值,那么這個(gè)變量的值就是undefined。
5.Null類型
Null類型被看做空對(duì)象指針,Null類型也是空的對(duì)象引用。
三大引用類型
1.Object類型
我們看到的大多數(shù)類型值都是Object類型的實(shí)例,創(chuàng)建Object實(shí)例的方式有兩種。
第一種是使用new操作符后跟Object構(gòu)造函數(shù),如下所示
var person = new Object();
person.name = "Micheal";
person.age = 24;
第二種方式是使用對(duì)象字面量表示法,如下所示
var person = {
name : "Micheal",
age : 24
};
alert(person.name);
2.Array類型
數(shù)組的每一項(xiàng)可以用來(lái)保存任何類型的數(shù)據(jù),也就是說(shuō),可以用數(shù)組的第一個(gè)位置來(lái)保存字符串,第二個(gè)位置保存數(shù)值,第三個(gè)位置保存對(duì)象....另外,數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的。
創(chuàng)建數(shù)組的基本方式有兩種
第一種是使用Array構(gòu)造函數(shù),如下所示
var colors = new Array("red","blue","yellow");
第二種是使用數(shù)組字面量表示法,如下所示
var colors = ["red","blue","yellow"];
3 Function類型
每個(gè)函數(shù)都是Function類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法。函數(shù)通常是使用函數(shù)聲明語(yǔ)法定義的,如下所示
function sum(num1,num2){
return num1 + num2;
};
這和使用函數(shù)表達(dá)式定義函數(shù)的方式相差無(wú)幾。
var sum = function (num1,num2){
return num1 + num2;
};
var result = sum(5,8);
alert(result);
typeof 操作符
由于js中的變量是弱類型的,所以它提供了一種檢測(cè)當(dāng)前變量的數(shù)據(jù)類型的方法,也就是typeof關(guān)鍵字.
typeof 123 //Number
typeof 'abc' //String
typeof true //Boolean
typeof undefined //Undefined
typeof null //Object
typeof { } //Object
typeof [ ] //Object
js的三種輸出方式
/*
* 控制瀏覽器彈出一個(gè)提示框
*/
alert("Hello JavaScript");
/*
* 控制瀏覽器在頁(yè)面中輸出一個(gè)內(nèi)容
* document.write()向body中寫(xiě)一個(gè)內(nèi)容
*/
document.write("看我出來(lái)不???");
/*
向控制臺(tái)輸出一個(gè)內(nèi)容
* */
console.log("你看我在哪出來(lái)~~~");
js編寫(xiě)的位置
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--可以將JS代碼編寫(xiě)到script標(biāo)簽中-->
<!--<script type="text/javascript">
alert("hello");
</script>-->
<!--
還可以將JS代碼編寫(xiě)到外部的js文件中,然后通過(guò)script標(biāo)簽來(lái)引入外部的文件
將JS代碼編寫(xiě)到外部文件中,可以在不同的頁(yè)面中引入相同的JS代碼,
方便后期的維護(hù),并且寫(xiě)在外部文件中可以使用瀏覽器的緩存,加快訪問(wèn)速度提高用戶體驗(yàn)
如果使用script來(lái)引入外部文件,則它就不能在編寫(xiě)任何的JS代碼了 ,
如果還需要編寫(xiě)則需要?jiǎng)?chuàng)建一個(gè)新的script標(biāo)簽
-->
<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
alert("我是內(nèi)部的JS代碼");
</script>
</head>
<body>
<!--
將JS代碼編寫(xiě)到標(biāo)簽的屬性中,屬于結(jié)構(gòu)與行為耦合,不方便后期的維護(hù),不推薦使用
-->
<!--
可以將JS代碼編寫(xiě)到標(biāo)簽的指定屬性中
-->
<button onclick="alert('你點(diǎn)我干嘛~~~~');">點(diǎn)我一下</button>
<!--
可以將JS代碼編寫(xiě)到超鏈接的href中
-->
<a href="javascript:alert('討厭?。?!');">你也點(diǎn)我一下</a>
<br /><br />
<a href="javascript:;">你也點(diǎn)我一下</a>
</body>
</html>
練習(xí)
求100以內(nèi)的偶數(shù)和
js字符串
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
*
* 在解析器的底層,保存字符串時(shí),實(shí)際上是以字符數(shù)組的形式保存的
* 所以字符串的操作方法和數(shù)組都是非常相似的
*
*/
var str = "Hello neusoft";
//console.log(str.length);
//console.log(str[6]);
/*
* length可以用來(lái)獲取一個(gè)字符串的長(zhǎng)度
*/
/*
* charAt()
* - 可以根據(jù)索引來(lái)獲取指定位置的字符
*
* charCodeAt()
* - 可以根據(jù)索引來(lái)獲取指定位置的字符的字符編碼
*
* String.fromCharCode()
* - 可以根據(jù)字符編碼來(lái)獲取字符
*/
str = "中AaHello neusoft";
var result = str.charAt(0);
result = str.charCodeAt(0);
result = String.fromCharCode(20013);
//console.log(result);
/*
* concat()
* - 可以用來(lái)連接兩個(gè)或多個(gè)字符串
* - 作用+ 一樣
*/
str = "hello";
var str2 = "world";
result = str.concat(str2,"你好","天氣好","吃的好");
/*
* indexOf()
* - 檢索指定字符串在當(dāng)前字符串中的位置
* - 參數(shù):
* 第一個(gè)參數(shù),要查詢的字符串
* 第二個(gè)參數(shù),查找開(kāi)始的位置
*
* - 返回值:
* 默認(rèn)會(huì)返回字符串第一次出現(xiàn)的位置的索引
* 如果沒(méi)有找到該內(nèi)容,則返回-1
*
* lastIndexOf()
* - 檢索指定字符串在當(dāng)前字符串中的位置
* - 該方法和indexOf()一樣,不同的是indexOf()是從前往后找
* 而lastIndexOf()是從后往前找
*/
str = "Helo neusoft";
//result = str.indexOf("a");
//result = str.indexOf("l",3);
result = str.lastIndexOf("l",5);
/*
* slice()
* - 可以用來(lái)截取一個(gè)字符中的內(nèi)容
* - 參數(shù):
* 第一個(gè)參數(shù),截取開(kāi)始位置的索引(包括開(kāi)始位置)
* 第二個(gè)參數(shù),截取結(jié)束位置的索引(不包括結(jié)束位置)
* - 可以接收一個(gè)負(fù)值作為參數(shù),如果是負(fù)值,則從后往前數(shù)
* - 也可以省略第二個(gè)參數(shù),如果省略則一直截取到最后
*/
str = "Hello neusoft";
result = str.slice(0,5);
result = str.slice(5);
/*
* substring()
* - 用來(lái)截取字符串的
* - 參數(shù):
* 第一個(gè)參數(shù),截取開(kāi)始位置的索引(包括開(kāi)始位置)
* 第二個(gè)參數(shù),截取結(jié)束位置的索引(不包括結(jié)束位置)
* - 該方法不接收負(fù)值,如果傳遞了一個(gè)負(fù)值,則默認(rèn)會(huì)設(shè)置為0
* - 該方法中如果第二個(gè)參數(shù)小于第一個(gè),則會(huì)調(diào)整參數(shù)的位置
*
*/
str = "Hello neusoft";
result = str.substring(6,0);
/*
* substr()
* - 用來(lái)截取字符串
* - 參數(shù):
* 第一個(gè)參數(shù),截取開(kāi)始位置的索引
* - 可以是負(fù)值,如果是負(fù)值從后往前數(shù)
* 第二個(gè)參數(shù),截取的個(gè)數(shù)
*/
str = "Hello neusoft";
result = str.substr(-3,2);
//console.log(result);
/*
* split()
* - 可以將一個(gè)字符串拆分為一個(gè)數(shù)組
* - 它需要一個(gè)字符串作為參數(shù),將會(huì)根據(jù)該字符串對(duì)字符串進(jìn)行拆分
* 并且將拆分的后的值保存到一個(gè)數(shù)組中返回
*/
str = "孫悟空@豬八戒@沙和尚@唐僧";
result = str.split("@");
//console.log(Array.isArray(result));
//console.log(result);
/*
* toLowerCase()
* - 將一個(gè)字符串轉(zhuǎn)換為小寫(xiě)
* toUpperCase()
* - 將一個(gè)字符串轉(zhuǎn)換為大寫(xiě)
*/
str = "abcdefg";
result = str.toUpperCase();
str = "ABCDEFG";
result = str.toLowerCase();
console.log(result);
var myStr = "I,love,you,Do,you,love,me";
var replacedStr = myStr.replace("love","hate");//"I,hate,you,Do,you,love,me";
//replace默認(rèn)只替換第一次查找到的,想要全局替換,需要置上正則全局標(biāo)識(shí),如
var myStr = "I,love,you,Do,you,love,me";
var replacedStr = myStr.replace(/love/g,"hate");//"I,hate,you,Do,you,hate,me"
</script>
</head>
<body>
</body>
</html>
字符串練習(xí)
編寫(xiě)一個(gè)程序,將某個(gè)字符串反轉(zhuǎn)
數(shù)組
數(shù)組簡(jiǎn)介
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 數(shù)組(Array)
* - 數(shù)組也是一個(gè)對(duì)象,功能和普通對(duì)象(Object)的功能類似的
* - 數(shù)組中也可以保存不同的元素,不同的是普通對(duì)象是通過(guò)一個(gè)字符串作為屬性名來(lái)操作屬性的,
* 而數(shù)組是通過(guò)索引來(lái)操作元素的。
* - 索引(index)
* - 索引就是從0開(kāi)始的整數(shù)
* - 數(shù)組比普通對(duì)象的存儲(chǔ)效率要高,在開(kāi)發(fā)中我們經(jīng)常使用數(shù)組來(lái)存儲(chǔ)一些數(shù)據(jù)
*/
//創(chuàng)建一個(gè)數(shù)組對(duì)象
var arr = new Array();
//使用typeof檢查一個(gè)數(shù)組對(duì)象時(shí)會(huì)返回object
//console.log(typeof arr);
/*
* 向數(shù)組中添加元素
* - 語(yǔ)法:
* 數(shù)組[索引] = 值;
*/
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 30;
/*
* 讀取數(shù)組中的元素
* - 語(yǔ)法:
* 數(shù)組[索引]
*/
//如果讀取一個(gè)數(shù)組中沒(méi)有的元素,會(huì)返回undefined
//console.log(arr[4]);
//獲取數(shù)組的長(zhǎng)度
/*
* length
* - length屬性可以獲取或設(shè)置數(shù)組的長(zhǎng)度
* - 對(duì)于連續(xù)的數(shù)組通過(guò)length屬性獲取到的就是數(shù)組中元素的個(gè)數(shù)
*/
//console.log(arr.length);//獲取數(shù)組的長(zhǎng)度
//修改數(shù)組的length屬性
//如果將長(zhǎng)度修改為小于之前的長(zhǎng)度的值,則多余的部分會(huì)被刪除
arr.length = 5;
//如果將長(zhǎng)度修改為大于之前的長(zhǎng)度的值,則會(huì)數(shù)組中會(huì)創(chuàng)建出空的元素
//arr.length = 10;
//向數(shù)組的最后添加一個(gè)元素
//語(yǔ)法:數(shù)組[數(shù)組.length] = 值;
arr[arr.length] = 55;
arr[arr.length] = 75;
arr[arr.length] = 85;
console.log(arr);
</script>
</head>
<body>
</body>
</html>
數(shù)組字面量表達(dá)方式(推薦)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 數(shù)組的字面量
*/
//var arr = new Arry();
var arr = [] ;
/*
* 使用字面量,可以在創(chuàng)建數(shù)組的同時(shí),向數(shù)組中添加元素
* 語(yǔ)法:
* var 數(shù)組 = [元素1,元素2...元素N];
*/
arr = [1,2,3,4,5,6,7];
//console.log(arr[6]);
arr = new Array(1,2,3,4,5,6,7);
arr = [10];//創(chuàng)建一個(gè)數(shù)組并向數(shù)組中添加一個(gè)元素
arr = new Array(10);//創(chuàng)建一個(gè)長(zhǎng)度為10的數(shù)組
//console.log(arr.length);
/*
* 在數(shù)組中可以保存任意類型的元素
*/
arr = [1,"hello",true,null,undefined,{name:"孫悟空"},function(){}];
//console.log(arr[5].name);
//console.log(arr[6]);
//數(shù)組中也可以保存數(shù)組,如果數(shù)組中保存的依然是數(shù)組,則我們稱這個(gè)數(shù)組為二維數(shù)組
arr = [
[1,2,3],
[4,5,6],
[5,6,7]
];
console.log(arr[0][1]);
</script>
</head>
<body>
</body>
</html>
數(shù)組的常用方法
push(),pop(),unshift(),shift()
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 創(chuàng)建一個(gè)數(shù)組
*/
var arr = ["孫悟空","豬八戒","沙和尚"];
/*
* push()
* - 該方法可以用來(lái)向數(shù)組的末尾添加新的元素,并返回?cái)?shù)組的新的長(zhǎng)度
*/
//console.log(arr);
var result = arr.push("唐僧","白骨精","蜘蛛精");
//console.log(arr);
//console.log("result = "+result);
/*
* pop()
* - 用來(lái)刪除并返回?cái)?shù)組的最后一個(gè)元素
* - 元素刪除以后,會(huì)自動(dòng)修正數(shù)組的長(zhǎng)度
*/
result = arr.pop();
result = arr.pop();
//console.log(arr);
//console.log("result = "+result);
/*
* unshift()
* - 向數(shù)組的最前邊添加元素,并返回新的長(zhǎng)度
*/
result = arr.unshift("牛魔王","鐵扇公主");
console.log(arr);
//console.log("result = "+result);
/*
* shift()
* - 刪除數(shù)組最前邊的元素,并返回被刪除的元素
* - 刪除完元素以后,會(huì)自動(dòng)調(diào)整數(shù)組的長(zhǎng)度
*/
result = arr.shift();
result = arr.shift();
console.log(arr);
console.log("result = "+result);
console.log(arr.length);
</script>
</head>
<body>
</body>
</html>
遍歷數(shù)組方式一
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 創(chuàng)建一個(gè)數(shù)組
*/
var arr = ["孫悟空","豬八戒","沙和尚","唐僧","白骨精","蜘蛛精"];
/*
* 遍歷數(shù)組
* - 遍歷數(shù)組就是指將數(shù)組中的每一個(gè)元素都獲取到
* - 一般情況下遍歷數(shù)組都是使用for循環(huán)來(lái)遍歷
*/
for(var i = 0 ; i < arr.length ; i++ ){
console.log(arr[i]);
}
</script>
</head>
<body>
</body>
</html>
遍歷數(shù)組方式二:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
/*
* 也可以使用forEach()來(lái)遍歷數(shù)組
* forEach()中需要一個(gè)函數(shù)作為參數(shù)
* - 像這種由我們定義而不由我們調(diào)用的函數(shù),我們稱為回調(diào)函數(shù)
* - forEach()中的回調(diào)函數(shù),由瀏覽器調(diào)用,
* 數(shù)組中有幾個(gè)元素函數(shù)就會(huì)被調(diào)用幾次,
* 每次遍歷到一個(gè)元素都會(huì)調(diào)用一次函數(shù),瀏覽器會(huì)通過(guò)實(shí)參的形式來(lái)將遍歷到內(nèi)容傳遞進(jìn)函數(shù)
* - 瀏覽器在調(diào)用回調(diào)函數(shù)傳遞了三個(gè)實(shí)參:
* 第一個(gè)參數(shù):正在遍歷的元素
* 第二個(gè)參數(shù):正在遍歷的元素的索引
* 第三個(gè)參數(shù):正在遍歷的數(shù)組對(duì)象
*
* - forEach()方法不支持IE8及以下的瀏覽器,所以如果需要兼容IE8則不要使用
*
*/
arr.forEach(function(value , index , obj){
console.log("value = "+value + " index = "+index+" obj = "+obj);
});
</script>
</head>
<body>
</body>
</html>
數(shù)組方法:slice(),splice():
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
/*
* slice()
* - 可以用來(lái)截取數(shù)組中的指定元素
* - 參數(shù):
* 第一個(gè)參數(shù),截取開(kāi)始的位置(包括開(kāi)始的位置)
* 第二個(gè)參數(shù),截取結(jié)束的位置(不包括結(jié)束的位置)
* - 該方法不會(huì)影響到原數(shù)組,而是將截取到的內(nèi)容封裝為一個(gè)新的數(shù)組返回
* - 可以傳遞一個(gè)負(fù)數(shù)作為參數(shù),如果是負(fù)數(shù),則從后往前數(shù)
* -1 表示 倒數(shù)第一
* -2 表示 倒數(shù)第二
* - 如果省略第二個(gè)參數(shù),則從開(kāi)始位置一直截取到最后
*/
var result = arr.slice(1,3);
result = arr.slice(1,-2);
result = arr.slice(1);
//console.log(result);
/*
* splice()
* - 可以用來(lái)刪除數(shù)組中的元素,并添加新元素
* - 它會(huì)影響到原數(shù)組,一旦執(zhí)行原數(shù)組中的元素將會(huì)被刪除
* - 參數(shù):
* 第一個(gè)參數(shù),開(kāi)始位置的索引
* 第二個(gè)參數(shù),表示刪除的個(gè)數(shù)
* 第三個(gè)參數(shù),這個(gè)方法還可以傳遞多個(gè)參數(shù)
* 在第三個(gè)參數(shù)以后,可以跟多個(gè)元素作為參數(shù),
* 這些元素將會(huì)被插入到開(kāi)始位置之前的位置
* - 它會(huì)將被刪除的元素作為返回值返回
*
*/
arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
//result = arr.splice(0,1);
//牛魔王替換 索引為0的元素
//result = arr.splice(0,1,"牛魔王");
//arr.splice(2,1,"牛魔王","紅孩兒","二郎神");
arr.splice(2,0,"牛魔王","紅孩兒","二郎神");
console.log(arr);
</script>
</head>
<body>
</body>
</html>
練習(xí) 去除調(diào)用數(shù)組中重復(fù)的數(shù)字
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//創(chuàng)建一個(gè)數(shù)組
var arr = [1,2,3,1,1,1,4,2,3,5];
//去除調(diào)用數(shù)組中重復(fù)的數(shù)字
//獲取數(shù)組中的數(shù)字
for(var i=0 ; i<arr.length ; i++){
//console.log(arr[i]);
//再次遍歷數(shù)組
for(var j=i+1 ; j<arr.length ; j++){
//console.log("----->" + arr[j]);
//比較兩個(gè)數(shù)字是否相等
if(arr[i] == arr[j]){
//進(jìn)入判斷,證明兩個(gè)數(shù)字重復(fù),則刪除arr[j]
arr.splice(j,1);
//需要在此位置在比較一次
j--;
}
}
}
console.log(arr);
</script>
</head>
<body>
</body>
</html>
數(shù)組的其他方法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒"];
var arr2 = ["白骨精","蜘蛛精"];
var arr3 = ["太上老君","如來(lái)佛祖"];
/*
* concat()
* - 可以用來(lái)連接兩個(gè)或多個(gè)數(shù)組
* - 不會(huì)影響原數(shù)組,而是將新的數(shù)組的返回
* - 可以將多個(gè)數(shù)組作為concat參數(shù)傳遞,也可以傳遞單個(gè)的元素
*/
var result = arr.concat(arr2 , arr3 , "唐僧");
//console.log(result);
/*
* join()
* - 可以將數(shù)組中的所有的元素連接為一個(gè)字符串
* - 該方法可以接收一個(gè)字符串作為參數(shù),這個(gè)字符串將會(huì)將會(huì)作為連接符來(lái)連接元素
* 如果不傳,默認(rèn)使用,
*/
arr = ["孫悟空","豬八戒","沙和尚"];
result = arr.join("@-@");
//console.log(result);
/*
* reverse()
* - 該方法可以用來(lái)反轉(zhuǎn)數(shù)組
* - 前邊的去后邊,后邊的去前邊
* - 它會(huì)影響到原數(shù)組,直接在原數(shù)組上反轉(zhuǎn)
*/
//arr.reverse();
//console.log(arr);
/*
* sort()
* - 可以用來(lái)對(duì)數(shù)組中的元素進(jìn)行排序
* - sort()會(huì)影響到原數(shù)組
* - 默認(rèn)它會(huì)按照元素的Unicode編碼進(jìn)行排序
* - 如果希望使用sort對(duì)一個(gè)數(shù)字型的數(shù)組進(jìn)行排序可能會(huì)得到不可預(yù)期的結(jié)果
* 因?yàn)樗瑯右矔?huì)按照數(shù)字的Unicode編碼進(jìn)行排序
* - 我們也可以自己來(lái)指定排序的規(guī)則
*
*/
var arr4 = ["a","c","b","e","d","f"];
arr4.sort();
//arr4 = [2,3,10,5,4,6];
/*
* 如果需要自定義排序規(guī)則,需要將一個(gè)函數(shù)作為參數(shù)傳遞給sort()方法
* 函數(shù)的結(jié)構(gòu):function(a , b){}
*
* 瀏覽器會(huì)多次以數(shù)組中的元素作為實(shí)參來(lái)調(diào)用該函數(shù),
* a和b具體是誰(shuí)不確定,但是a一定是在b前邊
* 瀏覽器將會(huì)根據(jù)函數(shù)的返回值,來(lái)決定兩個(gè)元素是否交互位置
* 如果返回一個(gè)大于0的值,則兩個(gè)元素互相交換位置
* 如果返回一個(gè)等于0的值,則證明兩個(gè)元素相等,位置不變
* 如果返回一個(gè)小于0的值,兩個(gè)元素的位置也不變
*
*/
arr4 = [10,4,3,5,2];
arr4.sort(function(a,b){
/*//升序 小 ---> 大
if(a > b){
//交換位置
return 1;
}else if(a == b){
return 0;
}else{
return -1;
}*/
//降序 大 ---> 小
/*if(a > b){
//交換位置
return -1;
}else if(a == b){
return 0;
}else{
return 1;
}*/
//如果希望升序排列,則 返回 a-b
//return a - b;
//如果希望降序排列,則 返回 b-a
return b - a;
});
console.log(arr4);
</script>
</head>
<body>
</body>
</html>