1、const and for..of loops
一个常量不可以被重新赋值,并且不能被重复声明
浏览器支持情况:IE11,FF31+,chrome35+,opera2+,safari6+,node0.10+,
const a = ‘const_a’;
console.log(‘This is a const : ’ + a);
//browser supply : FF31+ ,chrome37+,safari7.1+
var arr = [‘apple’,’orange’,’banana’];
for (var i of arr) {
console.log(i);
}
2、 default function parameters,ONLY supplied by FF now。
在javascript1.x中,函数参数的默认值为undefined,但是有些场景下我们需要设置一个默认值,那么这个新特性就会帮到你.
先看下以前的实现方式:
function multiply(a, b) {
b = typeof b !== ‘undefined’ ? b : 1;
return a*b;
}
new feture下的写法:
function multiply(a, b = 1) {
return a*b;
}
multiply(5);
如果传入新参数,就使用传入的参数运算
multiply(5,3);//return 15
参数是数组也提供了支持,但是需要注意局部变量还是全局变量。
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
那么如果是在参数中调用另一个方法呢,如下:
function test(){
alert(‘test’);
}
function test2(a=test()){
alert(‘text2’);
}
如果执行test2(),看到的结果是先弹出’test’,再弹出’test2’,也就是说参数中的调用总是先于
方法体的执行的,我们现在再把上面的例子改造下:
function test2(a=test()){
function test(){
alert(‘test’);
}
}
这时候如果再执行test2(),则会报TypeError: test is not a function
3、rest parameter,only supplied by FF now.
function test(a, b, …theArgs) {
console.log(theArgs + ‘,length=’ + theArgs.length);
}
注意参数中…前缀是必须,表示将剩余的参数全部塞进这个数组类型的参数中。
如下调用:
test(1)
test(1,3)
test(1,3,3)
test(1,3,3,5)
结果如下:
,length=0
3,length=1
3,5,length=2
我们不禁想到arguments对象,这两者之间有哪些不同呢?
(1)rest parameter只是包含那些没有被赋予一个独立的参数的参数,而arguments对象包含传递给函数的所有参数
(2)arguments对象不是真正的Array对象,而rest parameter则是Array的实例,这就意味着sort,map,forEach,pop 都可以直接的使用。
(3)arguments对象具有特定于自身的附加功能(如callee属性)
下面再看几个例子:
1) function multiply(multiplier, …theArgs) {
return theArgs.map(function (element) {
return multiplier * element;
});
}
var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]
这个例子实现了第一个参数分别和后面的参数相乘,
(2)function sortRestArgs(…theArgs) {
var sortedArgs = theArgs.sort();
return sortedArgs;
}
console.log(sortRestArgs(5,3,7,1));
该function实现参数的排序。如果将var sortedArgs = theArgs.sort();修改为var sortedArgs = argument