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 = arguments.sort(); 是个什么样的结果呢,试试看吧。