1、循环
for in 循环的是对象的属性
for of 循环的是对象的元素
两者都返回value而不是key
2、rest
有了这个参数,再也不用arguments统计额外的参数了
下面这个例子,计算任意数字的和:
function sum(...rest){
let s = 0;
for(var i of rest){
s += i
}
return s
}
sum(1);
sum(1,2,3);
3、命名空间
为了减少多个sj文件的变量名冲突,可以把自己的变量名和函数名绑定到一个全局变量上,如下:
var MYAPP = {}
MYAPP.name = 'bbb'
MYAPP.say = function(){
console.log('hello'+this.name)
}
3、高阶函数(哈哈),我感觉就是过滤器
(1)、map 参数是一个函数,这个函数只接受一个参数, 此参数是arr的每个元素
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 参数是一个函数,这个函数接受两个参数,结果继续(x)和序列的下一个元素(y)做累积计算
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)、真正的过滤器~~filter,参数是一个函数,这个函数的参数是要被过滤数组的元素
var r = [1,2,3,4,5,6].filter(function(x){
return x % 2 === 0
})
r; // [2,4,6]
(4)、sort Array的排序方法,这个方法比较坑爹。假如对数字排序它会把数字转成字符串,然后按照字符串的ASCII码进行排序,就会出现1,15,2,22,3。所以要像得出正常的排序必须给sort添加回调函数。
注意:有个常规,如果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的继承,我只想对js语言创建者说一句WTF,相比ES6的继承就舒服多了) class继承。
先来个person类:
class Person{
// 构造函数
constructor(name){
this.name = name
}
say(){
console.log('hello > '+this.name)
}
}
// 再new个小明哈哈
var xiaoming = new Person('小明')
xiaoming.say()
再看一下继承,上边只是定义类:
// 继续用上边的Person,我们做一个学生的类,并让他继承Person,继承用 -- extends
class Student extends Person{
constructor(name,age){
super(name) //调用父类构造函数要用 -- super
this.age = age
}
describe(){
console.log(`I am ${this.name} , ${this.age} yeas old`)
}
}
// 再new个小雪
var xiaoxue = new Student('小雪',18)
xiaoxue.describe()