# 內置對象
如何學習一個內置對象:
1. 屬性:訪問屬性,獲取數據;
2. 方法:
1. 了解方法的功能;
2. 了解方法參數意義和類型;
3. 了解方法的返回值的意義、類型;
4. 查MON/W3School文檔,先測試demo(案例),然后正式使用
<br>
<br>
## Math對象
  Math對象不是構造函數,它封裝了常用的數學屬性和方法,以靜態成員的方式提供跟數學相關的運算,如 取絕對值,取隨機數,取最大、最小值等等。
  Math中常用屬性和方法如下
>[success]Math.E()      //歐拉常數e(基數)
>Math.PI()    //圓周率
>Math.random() //生成[0,1)的隨機浮點
>Math.floor()    //向下取整
Math.ceil()   //向上取整
Math.round() // 四舍五入取整
Math.max()// 取最大值
Math.min() // 取最小值
Math.abs() // 取指定數的絕對值
Math.sin()/Math.cos() // 取正弦/余弦
Math.power()/Math.sqrt() // 取指數次冪/求平方根
<br>
### Math.E
```
console.log(Math.E);//2.71828...
```
### Math.PI
Math.PI:圓周率,一個圓的周長和直徑之比,約等于 3.14159.
```
Math.PI // 圓周率
console.log(Math.PI)
//計算指定半徑的圓的周長
function calculateCircumference (radius) {
return 2 * Math.PI * radius;
}
var f = calculateCircumference(1); // 6.283185307179586
console.log(f);
```
### Math.random()
Math.random():獲取一個 0 到 1之間的隨機數浮點數,包括0不包括1,可以用 \[0, 1) 表示。
```
//生成隨機數 Math.random() // 生成隨機數
function getRandom() {
return Math.random();
}
console.log(getRandom());
```
可以以 Math.random() 為基礎,獲取指定的兩個數之間 \[min, max) 的隨機數
```
//獲取指定的兩個數之間的隨機數
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
console.log(getRandomArbitrary(1, 6));
```
### Math的其他常用方法
```
// Math.floor()/Math.ceil() // 向下取整/向上取整
console.log(Math.floor(Math.PI));
console.log(Math.ceil(Math.PI));
// Math.round() // 四舍五入取整
console.log(Math.round(Math.E));
// Math.max()/Math.min() // 取最大和最小值
console.log(Math.max(1, 3, 5, 2, 9, 55, 88, 12, 15, 7));
var arr = [1, 3, 5, 2, 9, 55, 88, 12, 15, 7];
console.log(Math.max(...arr));//拓展語句
console.log(Math.min(1, 3, 5, 2, 9, 55, 88, 12, 15, 7));
var arr = [1, 3, 5, 2, 9, 55, 88, 12, 15, 'q'];
console.log(Math.min(...arr));//拓展語句
// Math.abs() // 絕對值
console.log(Math.abs(-22));
console.log(Math.random());
```
<br>
#### 需求
1、求區間 \[20, 60\] 的隨機整數
~~~
/*
? 1、求區間 [20, 60] 的隨機整數
? Math.random() ? ? ? ? ? ? ? [0, 1) ? ? ? 包含0不包含1,包含小數
? Math.random()*41 ? ? ? ? ? [0, 41) ? ? 包含0包含40,包含小數
? Math.random()*41 + 20 ? ? ? [20, 61) ? ? 包含0包含60,包含小數
? Math.floor(Math.random()*41 + 20) ? ? ? 包含0包含60,不包含小數
*/
var ran = Math.floor(Math.random() * 41 + 20);
console.log(ran);
?
//變形1
var ran2 = Math.floor(Math.random() * (60 - 20 - 1) + 20);
console.log(ran2);
?
//變形2
var max = 60;
var min = 20;
var ran3 = Math.floor(Math.random() * (max - min - 1) + min);
console.log(ran3);
?
// 變形3:將以上代碼封裝到函數中
?
/*
? 獲取去[max, min]的隨機整數
? max:區間的最大值
? min:區間的最小值
*/
function getRandom(max, min) {
? ?// 獲取去[max, min]的隨機整數
? ?var r = Math.floor(Math.random() * (max - min - 1) + min);
? ?return r;
}
?
//測試
var r = getRandom(20, 60);
console.log(r);
~~~
2、隨機生成顏色值 RGB 思路: (1)如何生成顏色值; (2)如何使用這些顏色值構造出 rgb(color1, color2, color3);
~~~
// 2、隨機生成顏色值 RGB
// 隨機RGB顏色值格式: rgb(color1, color2, color3) color顏色值 取[0, 255]
function getRandomRGB(min, max) {
? ?var color1 = getRandom(min, max);
? ?var color2 = getRandom(min, max);
? ?var color3 = getRandom(min, max);
? ?return 'rgb(' + color1 + ', ' + color2 + ', ' + color3 + ')';
}
?
var rgb = getRandomRGB(0, 255);
console.log(rgb);
?
?
//了解: 將顏色值設置為body標簽的背景顏色
document.body.style.backgroundColor = rgb;
?
~~~
3、模擬一個求最大值和最小值的對象 思路: (1) 分別寫出求最大、最小值的函數; (2) 將函數中的代碼封裝到對象中;
~~~
//求最大值函數
function getMax() {
? ?var max = arguments[0];
? ?for (var i = 1; i < arguments.length; i++) {
? ? ? ?if (max < arguments[i]) {
? ? ? ? ? ?max = arguments[i];
? ? ? }
? }
? ?return max;
}
console.log(getMax(1, 2, 51, 3, 9, 6, 1));
?
//求最小值函數
function getMin() {
? ?var min = arguments[0];
? ?for (var i = 1; i < arguments.length; i++) {
? ? ? ?if (min > arguments[i]) {
? ? ? ? ? ?min = arguments[i];
? ? ? }
? }
? ?return min;
}
console.log(getMin(1, 2, 51, 3, 9, 6, 1));
~~~
綜合以上函數,可以定義出一個求最大值和最小值的對象,如下
~~~
//字面量方式定義對象MyMath
var MyMath = {
? ?//求最大值方法
? ?max:function () {
? ? ? ?var max = arguments[0];
? ? ? ?for (var i = 1; i < arguments.length; i++) {
? ? ? ? ? ?if (max < arguments[i]) {
? ? ? ? ? ? ? ?max = arguments[i];
? ? ? ? ? }
? ? ? }
? ? ? ?return max;
? },
? ?//求最小值方法
? ?min:function () {
? ? ? ?var min = arguments[0];
? ? ? ?for (var i = 1; i < arguments.length; i++) {
? ? ? ? ? ?if (min > arguments[i]) {
? ? ? ? ? ? ? ?min = arguments[i];
? ? ? ? ? }
? ? ? }
? ? ? ?return min;
? }
}
//輸出驗證
console.log(MyMath.max(1, 250, 51, 3, 9, 6, 1));
console.log(MyMath.min(1, 250, 51, 3, 9, 6, 0));
~~~
<br>
<br>
## **Date對象**
Date即是JavaScript的內置對象,它本身又是構造函數。
  Math和Date的對比:
**Math**:內置對象,Math不是構造函數,不能使用new創建對象,Math的屬性和方法都是用Math本身來調用;**使用內置對象本身來調用的屬性和方法稱為靜態屬性或靜態方法,統稱靜態成員。**
**Date**:內置對象,Date() 是構造函數,可以使用new關鍵字創建對象,使用創建出來的對象調用屬性和方法;**使用new創建出來的對象稱為實例對象,使用實例對象調用的屬性和方法稱為實例屬性或實例方法,統稱實例成員。**
<br>
### Date對象的創建方式
獲取當前日期
```
var date = new Date ();
console.log(date);
```
根據指定字符串日期創建對象
```
var date1 = new Date ('2019-07-21 08:08:08');
console.log(date1);
```
```
var date2 = new Date ('2019-07-21 08:08:08')
console.log(date1);
```
獲取時間的毫秒值
```
var val = new date.valueOf();
console.log(val);
//即自時間紀元(UTC)1970年1月1日0時0分0秒起經過的毫秒數。
//方式二 -------推薦使用,valueOf()通常使用在JS內部使用,getTime()通常是給開發人員用的。
console.log(date.getTime());
//方式三,在HTML5中支持,舊版本瀏覽器會有兼容問題
console.log(Date.now());
//方式四 ----在舊版本瀏覽器中支持,在HTML5中有兼容問題。
var date2 = +new Date();//底層調用 valueOf() 方法
console.log(date2);
//
console.log(new Date(1563675154142))
```
### 日期格式化
需求:將日期轉換成格式 1988-08-08 08:08:08
通過查看MDN文檔學習以下方法.
>[success]//日期格式化方法
> toString() // 轉換成字符串
> valueOf() // 獲取毫秒值
> // 下面格式化日期的方法,在不同瀏覽器可能表現不一致,一般不用
> toDateString()
> toTimeString()
> toLocaleDateString()
> toLocaleTimeString()
1、定義一個函數,用于格式化日期對象,并將日期按照格式 yyyy-MM-dd HH:mm:ss 返回。思路: (1) 單獨獲取到當前日期的年月日,時分秒; (2) 將年月日,時分秒拼接成格式 yyyy-MM-dd HH:mm:ss; (3)注意 a、當用戶給函數傳入一個非日期對象時,報錯!如何處理? b、處理時間只有一位的值,如 2019-6-7 15:8:8 ;
```
function formatDate(date) {
//判斷用戶傳進來的類型是不是日期類型,不是則返回
//instanceof 判斷一個對象是否由某個構造函數創建出來的;
//instance 實例(對象) of .....的
if (!(date instanceof Date)) {
console.error('date不是日期類型!');
return;
}
//將時間分成各個部分
var year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),
hour = date.getHours(),
minutes = date.getMinutes(),
seconds = date.getSeconds();
//處理時間只有一位的值
/*if (month < 10) {
month = '0' + month;
}*/
var month = month < 10 ? '0' + month : month;
var day = day < 10 ? '0' + day : day;
var hour = hour < 10 ? '0' + hour : hour;
var minutes = minutes < 10 ? '0' + minutes : minutes;
var seconds = seconds < 10 ? '0' + seconds : seconds;
//返回格式化后的值
return year + '-' + month + '-' + day + ' ' + hour + ':' + minutes + ':' + seconds;
}
var d = new Date();
var dateStr = formatDate(d);
console.log(dateStr);
```
<br>
### 獲取指定部分日期
>[success] // getSeconds() 根據本地時間,返回一個指定的日期對象的秒數。 0-59
> console.log(date.getSeconds());
>[success] // getMinutes() 根據本地時間,返回一個指定的日期對象的分鐘數。 0-59
> console.log(date.getMinutes());
>[success] // getHours() 根據本地時間,返回一個指定的日期對象的小時數 0-23
> console.log(date.getHours());
>[success] // getDay() 返回星期幾 *** 0 表示周日,6 表示周六 ***
> console.log(date.getDay());
>[success]// getDate() 返回當前月的第幾天
> console.log(date.getDate());
>[success] // getMonth() 返回月份,***從0開始***
> console.log(date.getMonth());
>[success]// getFullYear() 返回4位的年份 如 2019
> console.log(date.getFullYear());
2、定義一個函數,計算兩個日期的時間差,返回相差的 天/時/分/秒 以上需求可分解為以下三個問題: (1)兩個日期對象如何相減? (2)函數如何返回多個值? (3)如何計算相差的天/時/分/秒? 思路: (1) 獲取各個時間段(day,hour,minutes,seconds)的時間; (2) 將各個時間段的時間封裝到對象中; (3) 將該對象返回;
```
function getIntervalTime(start, end) {
//定義時間差對象相關變量
var day, hour, minutes, seconds;
//獲取總毫秒數
//start - end等于start.valueOf() - end.valueOf()
var intervalTime = start - end;
// 將毫秒轉換成對應的天、時、分、秒
day = Math.floor(intervalTime / 1000 / 60 / 60 / 24);//獲取天數
hour = Math.floor(intervalTime / 1000 / 60 / 60 % 24);//獲取除天數外的小時數
minutes = Math.floor(intervalTime / 1000 / 60 % 60);//獲取除小時數外的分鐘數
seconds = Math.round(intervalTime / 1000 % 60);//獲取除分鐘數外的秒數
console.log(intervalTime / 1000 / 60 / 60 / 24);
//將天、時、分、秒封裝到對象中并返回
return {
day: day,
hour: hour,
minutes: minutes,
seconds: seconds
}
}
var d1 = new Date();
var d2 = new Date(2019, 1, 6, 11, 45, 20);
var obj = getIntervalTime(d1, d2);
console.log(obj);
console.log(obj.day + '天' + obj.hour + '小時' + obj.minutes + '分' + obj.seconds + '秒');
```
<br>
<br>
## **Array對象**
使用內置對象(即數組的構造函數)創建數組或使用new關鍵字調用關鍵字調用構造函數Array () 創建。
語法:
>[success]var 對象名稱 = new Array(數組元素或長度);
### 創建數組方式
方式一:數組字面量
```
var numbers = [1, 2, 3];
console.log(numbers);
```
方式二:使用的是數組的構造函數創建對象
```
var array = new Array(3,2,1);
console.log(array);
//創建一個長度為5的空數組
var array1 = new Array(5);
console.log(array1);
```
**注意**
>[success] 當構造函數參數中只有一個參數且為數值n時,構造函數將以數值n為數組的長度,創建一個長度為n的空數組。該數組是長度為n的空數據,并不存在數組元素!
>
> 在開發中,推薦使用中括號語法:var arr = \[\];
### 判斷變量是否是Array對象
在使用數組時,我們往往要先確定該變量是數組變量之后,才能放心地使用數組的方法,否則程序可能會出錯。那么如何確定一個變量是否是數組對象呢?
```
//如何確定一個變量是否是數組變量
//方式一:使用instanceof關鍵字,判斷變量是不是Array對象
var a = 1;
//instanceof是二元運算符,運算結果是一個布爾類型值(true或false)
console.log(a instanceof Array);
//將代碼封裝到方法中
function isArr(arr) {
if (!(arr instanceof Array)) {
return arr + ' 不是數組對象';
}
return arr + ' 是數組對象';
}
console.log(isArr(a));
//方式二:使用數組對象的isArray()方法
var a = [];
var b = Array.isArray(a);//true, 在不支持HTML5的環境中,不支持該方法,所以不推薦使用
console.log(b);
```
**注意**
一元運算符“!”的優先級比二元運算符instanceof優先級高,如果同時使用這兩個運算符,則應該使用“()”來控制運算順序,即以上代碼寫成 “if ( !(arr instanceof Array) ) {...}” 而不能寫成 “if ( !arr instanceof Array ) {...}”。
**拓展**
我們以前還學過類似于instanceof的關鍵字 typeof,instanceof和typeof有什么區別呢?
```
//instanceof和typeof的區別
console.log(typeof 'aaa');//string
var a = 'aaa';
console.log(typeof a);//string
a = new String('aaa');
console.log(typeof a);//object
//當typeof判斷一個引用類型變量時,總是返回一個object字符串,即typeof無法用于判斷一個變量哪個對象的變量!
//為了解決這個問題,ECMAScript引入了java語言中的一個關鍵字 instanceof。instanceof關鍵字就是用來判斷一個變量是否是某個引用類型的對象的。
console.log('aaa' instanceof String);//false
var a = 'aaa';
console.log(a instanceof String);//false
a = new String('aaa');
console.log(a instanceof String);//true
```
**小結**
>[success] 當使用typeof判斷一個引用類型變量時,總是返回一個 "object" 字符串,即typeof無法用于判斷一個變量具體是哪個對象的變量!
> 為了解決這個問題,ECMAScript引入了java語言中的一個關鍵字 instanceof。instanceof關鍵字就是用來判斷一個變量是否是某個引用類型的對象的。
### **Array對象的常用方法**
1. **返回**
**toString()** //把數組轉換成字符串返回,返回字符串中使用逗號分隔每一項
**valueOf()** //返回數組對象本身
2. **模擬棧操作**
**push(value1,value2,value3,...)** //將一個或多個元素添加到數組的末尾,并返回**該數組的新長度**;
**pop()** // 從數組中刪除最后一個元素,并返回**該元素的值**;
3. **模擬隊列操作**
**push()** // 將一個或多個元素添加到數組的末尾,并返回該數組的新長度;
**shift()** // 取出數組中的第一個元素,修改length屬性,返回被取出的元素;
**unshift()** // 在數組最前面插入項,返回數組的長度;
4. **數組翻轉和排序**
**reverse()** // 翻轉數組
**sort()** // 即使是數組sort也是根據字符,從小到大排序
5. **操作數組相關的方法**
**concat()** //把參數拼接到當前數組
**slice()** //從當前數組中截取一個新的數組,不影響原來的數組,參數start從0開始,end從1開始
**splice()** //刪除或替換當前數組的某些項,參數start, deleteCount, options(要替換的項目)
6. **位置相關的方法**
**indexOf()** //返回指定元素的索引,如果沒找到返回-1
參數一:從位置0開始查找,返回第一次找到的指定元素的索引,如果沒找到返回-1;
參數二:從指定位置開始查找指定元素,返回第一個找到的元素的索引;
**lastIndexOf()** //返回指定元素在數組中的最后一個的索引,如果沒找到返回-1
7. **迭代方法**
**every()** //方法測試數組的所有元素是否都通過了指定函數的測試。
**filter()** //創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。
**forEach()** //對數組的每個元素執行一次提供的函數
**some()** //測試是否至少有一個元素通過由提供的函數實現的測試 map() //創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果
8. **連接(聯結)方法**
**join()** //方法將數組的所有元素連接到一個字符串中,默認使用“,”分割。
#### **返回**
**toString()** //把數組轉換成字符串返回,返回字符串中使用逗號分隔每一項
**valueOf()** //返回數組對象本身
```
//toString()和valueOf(),所有對象中都有這兩個方法!
var arr = new Array('a', 'f', 'c', 'e');
console.log(arr);
console.log(arr.toString());//a,f,c,e 返回字符串,字符串使用都好分割
console.log(arr.valueOf());//["a", "f", "c", "e"] 返回數組本身
```
>[info] 在JavaScript中,所有對象中都有toString()和valueOf()這兩個方法。
#### **模擬棧操作**
棧操作(存儲數據特點:先進后出),像集裝箱,如下圖

使用數組的push()和pop()方法模擬棧操作,方法如下
**push(value1,value2,value3,...)** //將一個或多個元素添加到數組的末尾,并返回**該數組的新長度**; **pop()** // 從數組中刪除最后一個元素,并返回**該元素的值**;
代碼實現
```
// 1 棧操作(先進后出)
// push() 入棧 //將一個或多個元素添加到數組的末尾,并返回該數組的新長度
arr.push('a1','a2','a3');
console.log(arr);
// pop() 出棧 //從數組中刪除最后一個元素,并返回該元素的值
var pop = arr.pop();
console.log(pop);
console.log(arr);
```
#### **模擬隊列存儲**
隊列操作(存儲數據特點:先進先出),像在銀行盤對取錢的隊列

使用數組的push()、shift()和unshift()方法模擬隊列操作,方法如下 **push()** // 將一個或多個元素添加到數組的末尾,并返回該數組的新長度; **shift()** // 取出數組中的第一個元素,修改length屬性,返回被取出的元素; **unshift()** // 在數組最前面插入項,返回數組的長度;
實現代碼
```
var arr = new Array();
// // 2 隊列操作(先進先出)
// push() 入隊
arr.push('a1');
arr.push('a2');
arr.push('a3');
arr.push('a4');
// shift() 出隊 //取出數組中的第一個元素,修改length屬性
var s = arr.shift();
console.log(s);
console.log(arr);
console.log(arr.length);
// unshift() //在數組最前面插入項,返回數組的長度
var number = arr.unshift('qqq');
console.log(number);
console.log(arr);
```
### **數組翻轉**
**reverse()** // 翻轉數組
**sort()** // 即使是數組sort也是根據字符,從小到大排序
```
// reverse() //翻轉數組
arr.reverse();
console.log(arr);
// 3 排序方法
// sort(); //即使是數組sort也是根據字符,從小到大排序
arr.sort();
console.log(arr);
```
#### **操作數組相關的方法**
concat() //把參數拼接到當前數組
slice() //從當前數組中截取一個新的數組,不影響原來的數組,參數start從0開始,end從1開始 splice() //刪除或替換當前數組的某些項,參數start, deleteCount, options(要替換的項目)
#### **位置相關的方法**
indexOf() //返回指定元素的索引,如果沒找到返回-1
參數一:從位置0開始查找,返回第一次找到的指定元素的索引,如果沒找到返回-1;
參數二:從指定位置開始查找指定元素,返回第一個找到的元素的索引;
lastIndexOf() //返回指定元素在數組中的最后一個的索引,如果沒找到返回-1
```
var array = new Array("c", "a", "z", "a", "x", "x", "a");
console.log(array.indexOf('a')); // 返回第一次找到的指定元素的索引,如果沒找到返回-1
console.log(array.indexOf('a', 0)); // 從指定位置開始查找指定元素,返回第一個找到的元素的索引
```
#### **迭代方法**
迭代方法,不會修改原數組 ,在html5環境中可用
every() //方法測試數組的所有元素是否都通過了指定函數的測試。
filter() //創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。
forEach() //對數組的每個元素執行一次提供的函數
some() //測試是否至少有一個元素通過由提供的函數實現的測試
map() //創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果
```
//以下代碼可查文檔進行學習
var array = [1, 4, 9, 16];
//使用箭頭函數,x表示從array中遍歷出來的元素,箭頭表示將 x 傳入函數fn,然后將fn返回的值作為元素,添加到新數組map中。
var map = array.map(x =>fn(x));
console.log(map);
function fn(x) {
return x * 2;
}
```
#### **連接(聯結)方法**
join() //方法將數組的所有元素連接到一個字符串中,默認使用“,”分割。
```
var elements = ['Fire', 'Wind', 'Rain'];
console.log(elements.join());
console.log(elements.join(''));
console.log(elements.join('-'));
```
### 清空數組
// 方式1 推薦
arr = [];
// 方式2
arr.length = 0;
// 方式3
arr.splice(0, arr.length);
//開發中最常用的是 arr = [];
*****
### 需求一(掌握)
1、將數組 \[ '孫悟空', '布爾瑪', '克林' \] 轉成一個字符串,即以字符串格式輸出,每個數組元素使用 | 分隔,比如輸出為 “孫悟空|布爾瑪|克林”。
使用兩種方式實現 (1) 使用數組方式 (2) 使用字符串截取的方式:
**join()指定一個字符串來分隔數組的每個元素。**
~~~
var array = new Array('孫悟空', '布爾瑪', '克林');
console.log(array.toString());//孫悟空,布爾瑪,克林
console.log(array.join('|'));//孫悟空|布爾瑪|克林
~~~
2、將一個字符串數組的元素的順序進行反轉。如 \["a", "b", "c", "d"\] -> \[ "d","c","b","a"\]。
使用兩種方式實現。 (1)使用數組方reverse()方法 (2)自己寫一個for循環實現 提示:第i個和第length-i-1個進行交換
~~~
//方式一
var array1 = new Array('a', 'b', 'c', 'd','u');
array1.reverse()
console.log(array1);
?
//方式二:參考
var array2 = new Array('a', 'b', 'c', 'd','e','f');
function reverseArr(arr) {
? ?console.log(Math.floor(arr.length / 2));
? ?for (var i = 0; i < Math.floor(arr.length/2); i++) {
? ? ? ?var temp = arr[i];
? ? ? ?arr[i] = arr[arr.length - i - 1];
? ? ? ?arr[arr.length - i - 1] = temp;
? }
}
reverseArr(array2);
console.log(array2);
~~~
方式二分析:
中每次循環交換就兩個數組元素,所以循環次數(交換次數)應該等于數組長度的一半,即 arr.length/2。由于 arr.length/2 可能得到小數,小數部分在循環中沒有意義,所以將其向下取整 Math.floor(arr.length/2) ;
### 需求二(掌握)
通過查找MDN文檔,完成以下練習。
**filter方法**
1、工資的數組\[1500, 1200, 2000, 2100, 1800\],返回小于或等于2000的所有工資。
~~~
var array = new Array(1500, 1200, 2000, 2100, 1800);
//過濾掉不滿足條件的項
var result = array.filter(function (element) {
? ?//element ? 當前遍歷到的數組元素
? ?return element <= 2000;
})
console.log(result);
~~~
**indexOf方法**
參數一、指定要返回的位置字符,找不到元素則返回 -1 。
參數二、指定查詢位置。
2、找出數組 \['c', 'a', 'z', 'a', 'x', 'a'\] 中每一個a出現的位置。 (1)利用 indexOf() 方法的第二個參數,記錄數組元素的下標; (2)指定do-while循環的出口為 index !== -1;
~~~
var array = new Array('c', 'a', 'z', 'a', 'x', 'a');
var index = -1;
do{
? ?index = array.indexOf('a',index+1);
? ?//判斷index ,如index===-1,尋找結束并且找不到元素。
? ?if (index !== -1) {
? ? ? ?//找到了元素
? ? ? ?console.log(index);
? }
}while (index !== -1);
~~~
**數組去重**
3、定義一個函數,用于去掉一個數組的重復元素
~~~
//定義去重方法,unique 唯一的;
function unique(array) {
? ?//定義臨時數組
? ?//去重操作:判斷型數組中是否存在一個元素。
var tempArr = new Array();
? ?for (var i = 0; i < array.length; i++) {
? ? ? ?//如果臨時數組中不存在當前遍歷到的元素,則將該元素添加到臨時數組中
? ? ? ?if (tempArr.indexOf(array[i]) === -1) {
? ? ? ? ? ?tempArr.push(array[i]);
? ? ? }
? }
}
unique(array);
console.log(tempArr);
~~~
以上練習是為了讓大家更熟悉常用的Array對象的方法,在實際開發中如果有使用現成的方法,就使用現成的方法,不必在自己去實現。