6.13心得
concat
concat() 方法用於連接兩個或多個數組。
該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
語法
arrayObject.concat(arrayX,arrayX,......,arrayX)
arrayX 必需。該參數可以是具體的值,也可以是數組對象。可以是任意多個。
返回值
返回一個新的數組。該數組是通過把所有 arrayX 參數添加到 arrayObject 中生成的。
如果要進行 concat() 操作的參數是數組,那麽添加的是數組中的元素,而不是數組。
every
every() 方法測試數組的所有元素是否都通過了指定函數的測試。MDN array.every。
arr.every(callback) 會對每一個元素都執行 callback 方法,直到 callback 返回 false。
有時候 every 方法會和 forEach 方法相比較,因為 forEach 無法停止,而 every 方法返回 flase 時可以中途停止。
若全部通過測試,函數返回值 true,中途退出,返回 false;
不對原數組產生影響。
代碼
function isBigEnough(element, index, array) {
console.log(index);
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// 0
// 1
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// 0 1 2 3 4
// passed is true
代碼
filter
filter() 方法使用指定的函數測試所有元素,並創建一個包含所有通過測試的元素的新數組。MDN array.filter。
其實這個方法就是一個過濾方法,前面那個 every 方法,只判斷不過濾,filter 會過濾掉一些不符合條件的,並返回新數組。
返回一個滿足過濾條件的新數組;
不會改變原數組。
代碼
function isBigEnough(element, index, array) {
return (element >= 10);
}
var a1 = [19, 22, 6, 2, 44];
var a2 = a1.filter(isBigEnough);
a1 //[19, 22, 6, 2, 44]
a2 //[19, 22, 44]
代碼
forEach
forEach() 方法對數組的每個元素執行一次提供的函數(回調函數)。MDN array.forEach。
函數沒有返回值,即 underfined;
不對原數組產生影響。
代碼
function logArrayElements(element, index, array) {
console.log("a[" + index + "] = " + element);
}
// 註意索引2被跳過了,因為在數組的這個位置沒有項
var result = [2, 5, 9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = 9
result //underfined
代碼
indexOf
indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置。
searchvalue 必需。規定需檢索的字符串值。
fromindex 可選的整數參數。規定在字符串中開始檢索的位置。它的合法取值
是 0 到 stringObject.length - 1。如省略該參數,則將從字符串的首字符開始檢索。
<script type="text/javascript">
var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")
document.write(str.indexOf("World") + "<br />")
document.write(str.indexOf("world"))
</script>
reverse
reverse() 方法用於顛倒數組中元素的順序。
註釋:該方法會改變原來的數組,而不會創建新的數組。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.reverse())
</script>
join
join() 方法用於把數組中的所有元素放入一個字符串。
元素是通過指定的分隔符進行分隔的。
返回值
返回一個字符串。該字符串是通過把 arrayObject 的每個元素轉換為字符串,然後把
這些字符串連接起來,在兩個元素之間插入 separator 字符串而生成的。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.join())
</script>
pop
pop() 方法用於刪除並返回數組的最後一個元素。
返回值
arrayObject 的最後一個元素。
說明
pop() 方法將刪除 arrayObject 的最後一個元素,把數組長度減 1,並且返回它刪除的
元素的值。如果數組已經為空,則 pop() 不改變數組,並返回 undefined 值。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr)
document.write("<br />")
document.write(arr.pop())
document.write("<br />")
document.write(arr)
</script>
push
push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度。
返回值
把指定的值添加到數組後的新長度。
說明
push() 方法可把它的參數順序添加到 arrayObject 的尾部。它直接修改 arrayObject,
而不是創建一個新的數組。push() 方法和 pop() 方法使用數組提供的先進後出棧的功能。
提示和註釋
註釋:該方法會改變數組的長度。
提示:要想數組的開頭添加一個或多個元素,請使用 unshift() 方法。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.push("James") + "<br />")
document.write(arr)
</script>
shift
shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。
返回值
數組原來的第一個元素的值。
說明
如果數組是空的,那麽 shift() 方法將不進行任何操作,返回 undefined 值。
請註意,該方法不創建新數組,而是直接修改原有的 arrayObject。
提示和註釋
註釋:該方法會改變數組的長度。
提示:要刪除並返回數組的最後一個元素,請使用 pop() 方法。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.shift() + "<br />")
document.write(arr)
</script>
slice
slice() 方法可從已有的數組中返回選定的元素。
返回值
返回一個新的數組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。
說明
請註意,該方法並不會修改數組,而是返回一個子數組。如果想刪除數組中的一
段元素,應該使用方法 Array.splice()。
提示和註釋
註釋:您可使用負值從數組的尾部選取元素。
註釋:如果 end 未被規定,那麽 slice() 方法會選取從 start 到數組結尾的所有元素。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.slice(1) + "<br />")
document.write(arr)
</script>
toLocaleString
把數組轉換為本地字符串。
語法
arrayObject.toLocaleString()
返回值
arrayObject 的本地字符串表示。
說明
首先調用每個數組元素的 toLocaleString() 方法,
然後使用地區特定的分隔符把生成的字符串連接起來,形成一個字符串。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.toLocaleString())
</script>
splice
splice() 方法向/從數組中添加/刪除項目,然後返回被刪除的項目。
註釋:該方法會改變原始數組。
說明
splice() 方法可刪除從 index 處開始的零個或多個元素,並且用參數
列表中聲明的一個或多個值來替換那些被刪除的元素。
如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數組。
瀏覽器支持
所有主流瀏覽器都支持 splice() 方法。
提示和註釋
註釋:請註意,splice() 方法與 slice() 方法的作用是不同的,splice() 方法會直接對數組進行修改。
<script type="text/javascript">
var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"
document.write(arr + "<br />")
arr.splice(2,0,"William")
document.write(arr + "<br />")
</script>
unshift
unshift() 方法可向數組的開頭添加一個或更多元素,並返回新的長度。
返回值
arrayObject 的新長度。
說明
unshift() 方法將把它的參數插入 arrayObject 的頭部,並將已經存在的
元素順次地移到較高的下標處,以便留出空間。該方法的第一個參數
將成為數組的新元素 0,如果還有第二個參數,它將成為新的元素 1,以此類推。
請註意,unshift() 方法不創建新的創建,而是直接修改原有的數組。
提示和註釋
註釋:該方法會改變數組的長度。
註釋:unshift() 方法無法在 Internet Explorer 中正確地工作!
提示:要把一個或多個元素添加到數組的尾部,請使用 push() 方法。
<script type="text/javascript">
var arr = new Array()
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.unshift("William") + "<br />")
document.write(arr)
</script>
map
map() 方法返回一個由原數組中的每個元素調用一個指定方法後的返回值組成的新數組。MDN array.map。
map reduce 這兩個函數在處理數組上一直都是一把手,帶來很大的便捷性。
返回一個經過回掉函數處理的新數組;
不對原數組產生影響。
var a1 = [1, 4, 9];
var a2 = a1.map(Math.sqrt);
a1 //[1, 4, 9]
a2 //[1, 2, 3]
reduce
reduce() 方法接收一個函數作為累加器(accumulator),
數組中的每個值(從左到右)開始合並,最終為一個值。MDN array.reduce。
reduce 是一個合並的過程,從左到右,直到把所有元素合並到一起,
並返回最終的結果。它接受兩個參數,第一個參數是一個回掉函數,
第二個參數是一個初始值,表示處理第一個元素時的前一個值。這個
回掉函數接受四個參數,依次是 accumulator(上次處理的結果),
currentValue(當前元素的值),index(當前元素索引),array(調用 reduce 的數組)。
返回最終合並的結果,即回掉函數的輸出,可以為字符串,對象,數組等任意結果;
不對原數組產生影響。
var getAdd = (pre, cur) => pre + cur;
var a1 = [1, 2, 3];
var a2 = a1.reduce(getAdd, 0);
a1 //[1, 2, 3]
a2 //6
reduceRight
reduceRight() 方法接受一個函數作為累加器(accumulator),讓每個值
(從右到左,亦即從尾到頭)縮減為一個值。(與 reduce() 的執行方向相反)MDN array.reduceRight。
var toStr = (pre, cur) => ‘‘ + pre + cur;
var a1 = [1, 2, 3];
var a2 = a1.reduce(toStr, ‘‘);
a2 //"123"
a2 = a1.reduceRight(toStr, ‘‘);
a2 //"321"
some
some() 方法測試數組中的某些元素是否通過了指定函數的測試。MDN array.some。
sort
sort() 方法對數組的元素做原地的排序,並返回這個數組。 sort 排序可能是不穩定的。
默認按照字符串的Unicode碼位點(code point)排序。MDN array.sort。
sort 函數用於排序,比較常用,若沒有制定排序函數,則按照 unicode 位點進行排序,
而且數字會被轉成字符串,所以 ‘123’ 要排在 ‘11’ 的後面。
我們會用 sort 做一些有意思的排序,比如漢字按照拼音排序。
返回排序後的原數組;
會對數組進行修改。
復制代碼
var big = function(a, b){
return a - b;
}
var a1 = [2, 4, 77, 1];
var a2 = a1.sort(big);
a1 //[1, 2, 4, 77]
a1 === a2; //true
復制代碼
localeCompare 可以對漢字進行排序,當同時出現漢字和字母的時候會有 bug:
var sort_py = function(a, b){
return a.localeCompare(b);
}
var a1 = ["北京", "上海", "南京", "合肥"];
a1.sort(sort_py);
//["北京", "合肥", "南京", "上海"]
toString
toString() 返回一個字符串,表示指定的數組及其元素。MDN array.toString。
顯然,這個方法和 join 方法比較一下。
返回拼接的字符串;
不會改變原數組。
var a1 = [1, 2, 3];
var a2 = a1.toString();
a2 //"1,2,3"
ES6 中新添的數組方法
上面的這些方法都是 ES5 的,來看看 ES6 添加了哪些新方法。
copyWithin
copyWithin() 方法會淺拷貝數組的部分元素到同一數組的不同位置,
且不改變數組的大小,返回該數組。MDN array.copyWithin。
接受三個參數,分別是要拷貝到的位置 target,拷貝開始位置 start 和結束位置 end。
返回修改了的原數組;
會對數組進行修改,且是淺拷貝;
參數可負,負值時倒推,且 end 為空表示數組長度。
var a1 = [1, 2, 3, 4, 5];
var a2 = a1.copyWithin(0, 2, 4);
a1 //[3, 4, 3, 4, 5]
a2 //[3, 4, 3, 4, 5]
a1 === a2; //true
find
如果數組中某個元素滿足測試條件,find() 方法就會
返回滿足條件的第一個元素,如果沒有滿足條件的元素,則返回 undefined。MDN array.find。
返回找到的那個元素,若未找到,返回 underfined
不對原數組產生影響。
function isBigEnough(element, index, array) {
return (element >= 10);
}
var a1 = [8, 18, 14];
var num = a1.find(isBigEnough); //18
fill
使用 fill() 方法,可以將一個數組中指定區間的所有元素的值, 都替換成或者說填充成為某個固定的值。MDN array.fill。
fill 方法接受三個參數,第一個參數 value 表示要填充到值,後面兩個 start 和 end 表示開始和結束位置,可選,且左閉右開。
函數返回值是修改了的原數組;
可對數組產生影響。
var a1 = [1, 2, 3, 4, 5];
var a2 = a1.fill(6, 1, 4);
a1 //[1, 6, 6, 6, 5]
a2 //[1, 6, 6, 6, 5]
a1 === a2; //true
keys
數組的 keys() 方法返回一個數組索引的叠代器。MDN array.keys。
這個方法會返回一個數組索引的叠代器,叠代器在 ES6 中有特殊的用途。
函數返回一個叠代器對象;
不會改變原數組。
復制代碼
var arr = ["a", "b", "c"];
var iterator = arr.keys();
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
復制代碼
entries
entries() 方法返回一個 Array Iterator 對象,該對象包含數組中每一個索引的鍵值對。MDN array.entries。
var arr = ["a", "b", "c"];
var eArr = arr.entries();
console.log(eArr.next().value); // [0, "a"]
console.log(eArr.next().value); // [1, "b"]
console.log(eArr.next().value); // [2, "c"]
includes
includes() 方法用來判斷當前數組是否包含某指定的值,如果是,則返回 true,
否則返回 false。MDN array.includes。
該函數接受兩個參數,第二個參數表示開始查找位置,起始位置為 0。這個
方法與 indexOf 方法最大的區別不僅在於返回值一個是索引,一個是布爾值,
indexOf 方法使用的是 === 來判斷,無法判斷 NaN 情況,而 includes 可以判斷。
返回 true 或 false;
不會改變原數組。
var a1 = [1, NaN];
a1.indexOf(NaN);//-1
a1.includes(NaN);//true
什麽叫原型
原型是指原來的類型或模型,特指文學藝術作品中塑造人物形象所依據的現實生活中的人。
原型是指一個詞語或一個類型意義的所有典型模型或原形象,是一個類型的組典型特征。
比如,鳥的原型可以是任何一只麻雀但企鵝就不是,因為它不具備某些典型的特征。特征本身可
能或多或少是典型的。
原型具有歸納性。原型的歸納性體現在通過歸納出相互排斥的少量類型,簡化類型的多樣性。
類型的劃分依賴於對區分性特性的判斷。
原型具有經驗性。因為“在新情景下使用詞的過程就是將現在經驗和過去經驗進行比較,判斷
它們是否在相同的語言編碼中足以相同的過程。
原型具有規約性。原型的[3] 規約性主要體現在約定俗成性。例如,”男性“和”女性“主要是由
遺傳決定的,但在判斷某人是”男性“或”女性“時,我們主要依據頭發的長短、身高、穿著和有
無胡須等次要的綜合性別特征和文化規約做出判斷。
原型具有動態必。原型文本與具體文本的相互依存是文本賴以存在的社會環境變化的產物,
原型的穩定性和文本環境的變化是相互影響的。”原型和社會情景不存在完美的平衡;具體
文本只不過是文本的穩定性與交際情景的特殊需要在磨合過程中的一種折衷。
1. 創建obj對象:obj=new Object();
2. 將obj的內部__proto__指向構造他的函數A的prototype,同時,obj.constructor===A.prototype
.constructor(這個是永遠成立的,即使A.prototype不再指向原來的A原型,也就是說:類的實例對
象的constructor屬性永遠指向"構造函數"的prototype.constructor),從而使得obj.constructor.prototype
指向A.prototype(obj.constructor.prototype===A.prototype,當A.prototype改變時則不成立,下文有
遇到)。obj.constructor.prototype與的內部_proto_是兩碼事,實例化對象時用的是_proto_,obj是
沒有prototype屬性的,但是有內部的__proto__,通過__proto__來取得原型鏈上的原型屬性和原型
方法,FireFox公開了__proto__,可以在FireFox中alert(obj.__proto__);
3. 將obj作為this去調用構造函數A,從而設置成員(即對象屬性和對象方法)並初始化。
當這3步完成,這個obj對象就與構造函數A再無聯系,這個時候即使構造函數A再加任何成員,
都不再影響已經實例化的obj對象了。此時,obj對象具有了x屬性,同時具有了構造函數A的原型
對象的所有成員,當然,此時該原型對象是沒有成員的。
原型對象初始是空的,也就是沒有一個成員(即原型屬性和原型方法)。可以通過如下方法
驗證原型對象具有多少成員。
var num=0;
for(o in A.prototype) {
alert(o);//alert出原型屬性名字
num++;
}
alert("member: " + num);//alert出原型所有成員個數。
6.13心得