1:最新的ES6规范引入了新的数据类型Map;
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
2:设置超出一行后用...来表示剩余内容
.myls-1 {
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
3:遍历Array
可以采用下标循环,遍历Map
和Set
就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。
具有iterable
类型的集合可以通过新的for ... of
循环来遍历。
for ... of
循环是ES6引入的新的语法,请测试你的浏览器是否支持:
4 :匿名函数
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};可以通过abs来调用
5:JavaScript还有一个免费赠送的关键字arguments
,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments
类似Array
但它不是一个Array
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}实际上arguments
最常用于判断传入参数的个数。
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}rest可以获取多传的参数
6:JavaScript引擎在行末自动添加分号的机制
7:
绑定到对象上的函数称为方法,和普通函数也没啥区别,但是它在内部使用了一个this
关键字,这个东东是什么?在一个方法内部,this
是一个特殊变量,它始终指向当前对象
var xiaoming = {
name: '小明',
birth: 1990,
age: function () {
var y = new Date().getFullYear();
return y - this.birth;
}
};
xiaoming.age();
8:高阶函数英文叫Higher-order function。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
9:
function pow(x) {
return x * x;
}
ar arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow);map会遍历所有的元素。通过pow();最后返回一个新的数组
再看reduce的用法。Array的reduce()
把一个函数作用在这个Array
的[x1, x2, x3...]
上,这个函数必须接收两个参数,reduce()
把结果继续和序列的下一个元素做累积计算
var arr = [1, 3, 5, 7, 9]; arr.reduce(function (x, y) { return x + y; });
10:filter:filter也是一个常用的操作,它用于把Array
的某些元素过滤掉,然后返回剩下的元素。和map()
类似,Array
的filter()
也接收一个函数。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是true
还是false
决定保留还是丢弃该元素。最后返回一个数组
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
11:sort,arry的sort方法排序字符串会根据ASCII码进行排序,而小写字母a
的ASCII码在大写字母之后;默认把所有元素先转换为String再排序。对于两个元素x
和y
,如果认为x < y
,则返回-1
,如果认为x == y
,则返回0
,如果认为x > y
,则返回1
12:闭包:
函数作为返回值。例子:
function sum(arr) { return arr.reduce(function (x, y) { return x + y; }); } sum([1, 2, 3, 4, 5]); // 15
var f = lazy_sum([1, 2, 3, 4, 5]); // function sum()(返回的只是里面的sunm())
f();返回累加的结果