1疙驾、循環(huán)
for in 循環(huán)的是對(duì)象的屬性
for of 循環(huán)的是對(duì)象的元素
兩者都返回value而不是key
2凶伙、rest
有了這個(gè)參數(shù),再也不用arguments統(tǒng)計(jì)額外的參數(shù)了
下面這個(gè)例子它碎,計(jì)算任意數(shù)字的和:
function sum(...rest){
let s = 0;
for(var i of rest){
s += i
}
return s
}
sum(1);
sum(1,2,3);
3函荣、命名空間
為了減少多個(gè)sj文件的變量名沖突,可以把自己的變量名和函數(shù)名綁定到一個(gè)全局變量上扳肛,如下:
var MYAPP = {}
MYAPP.name = 'bbb'
MYAPP.say = function(){
console.log('hello'+this.name)
}
3傻挂、高階函數(shù)(哈哈),我感覺(jué)就是過(guò)濾器
(1)挖息、map 參數(shù)是一個(gè)函數(shù)金拒,這個(gè)函數(shù)只接受一個(gè)參數(shù), 此參數(shù)是arr的每個(gè)元素
var arr = [1, 2, 3]
var r = arr.map(function(x){
return x*x
// 1*1 = 1
// 2*2 = 4
// 3*3 = 9
})
r; // 1,4,9
(2)、reduce 參數(shù)是一個(gè)函數(shù)套腹,這個(gè)函數(shù)接受兩個(gè)參數(shù)绪抛,結(jié)果繼續(xù)(x)和序列的下一個(gè)元素(y)做累積計(jì)算
var arr = [1, 2, 3, 4]
var r = arr.reduce(function(x,y){
return x*y
// 1*2 = 2
// 2*3 = 6
// 6*4 = 24
})
r; // 24
(3)、真正的過(guò)濾器~~filter,參數(shù)是一個(gè)函數(shù)电禀,這個(gè)函數(shù)的參數(shù)是要被過(guò)濾數(shù)組的元素
var r = [1,2,3,4,5,6].filter(function(x){
return x % 2 === 0
})
r; // [2,4,6]
(4)幢码、sort Array的排序方法,這個(gè)方法比較坑爹尖飞。假如對(duì)數(shù)字排序它會(huì)把數(shù)字轉(zhuǎn)成字符串症副,然后按照字符串的ASCII碼進(jìn)行排序,就會(huì)出現(xiàn)1政基,15贞铣,2,22腋么,3咕娄。所以要像得出正常的排序必須給sort添加回調(diào)函數(shù)亥揖。
注意:有個(gè)常規(guī)珊擂,如果x<y 則返回-1,如果x>y則返回1费变,如果x=y則返回0
[1,15,2,22,3].sort(function(x,y){
if(x<y){return -1}
if(x>y){return 1}
return 0
}) // 1,2,3,15,22
4摧扇、繼承(看了es5de的繼承,我只想對(duì)js語(yǔ)言創(chuàng)建者說(shuō)一句WTF挚歧,相比ES6的繼承就舒服多了) class繼承扛稽。
先來(lái)個(gè)person類(lèi):
class Person{
// 構(gòu)造函數(shù)
constructor(name){
this.name = name
}
say(){
console.log('hello > '+this.name)
}
}
// 再new個(gè)小明哈哈
var xiaoming = new Person('小明')
xiaoming.say()
再看一下繼承,上邊只是定義類(lèi):
// 繼續(xù)用上邊的Person,我們做一個(gè)學(xué)生的類(lèi),并讓他繼承Person,繼承用 -- extends
class Student extends Person{
constructor(name,age){
super(name) //調(diào)用父類(lèi)構(gòu)造函數(shù)要用 -- super
this.age = age
}
describe(){
console.log(`I am ${this.name} , ${this.age} yeas old`)
}
}
// 再new個(gè)小雪
var xiaoxue = new Student('小雪',18)
xiaoxue.describe()