当前位置: > > > JS - ES2015/ES6新特性详解6(二进制和八进制、尾调用、其他新增的API)

JS - ES2015/ES6新特性详解6(二进制和八进制、尾调用、其他新增的API)

相关文章系列:
JS - ES2015/ES6新特性详解1(let、const、For..of循环、迭代器、生成器)
JS - ES2015/ES6新特性详解2(Set, WeakSet, Map, WeakMap、箭头函数)
JS - ES2015/ES6新特性详解3(默认参数、不定参数、扩展运算符、解构)
JS - ES2015/ES6新特性详解4(类、模块、Promises、模板字符串)
JS - ES2015/ES6新特性详解5(代理、反射、Symbols、Unicode编码)
[当前文章] JS - ES2015/ES6新特性详解6(二进制和八进制、尾调用、其他新增的API)

十九、二进制和八进制字面量

1,之前我们可以使用十六进制数字的字面量
console.log(0xff); // 255

2,ES6 又新增了二进制和八进制数字的字面量。
console.log(0b11111)  //31
console.log(0o2342)  //1250

二十、Tail Call(尾调用优化)

尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。
ES6 可以确保尾调用不会造成堆栈溢出。 (不是所有的实现工作)。

(1)下面是一个简单的样例
function factorial(n, acc = 1) {
    if (n <= 1) return acc;
    return factorial(n - 1, n * acc);
}
console.log(factorial(10))
console.log(factorial(100))
console.log(factorial(1000))
console.log(factorial(10000))
console.log(factorial(100000))


(2)运行结果如下:

二十一、Math、Number、String、Object等增加了新的API方法和常量

(1)下面是一些使用样例
console.log("---- Number ----");
console.log(Number.EPSILON);
console.log(Number.isInteger(Infinity));
console.log(Number.isNaN("NaN"));


console.log("---- Math ----");
console.log(Math.acosh(3));
console.log(Math.hypot(3, 4));
console.log(Math.imul(Math.pow(2, 32) - 1, Math.pow(2, 32) - 2));

console.log("---- String ----");
console.log("abcde".includes("cd") );
console.log("abc".repeat(3) );

console.log("---- Array ----");
console.log(Array.of(1, 2, 3) );
console.log([0, 0, 0].fill(7, 1) );
console.log([1, 2, 3].find(x => x == 3) );
console.log([1, 2, 3].findIndex(x => x == 2));
console.log([1, 2, 3, 4, 5].copyWithin(3, 0));
for (let [index, elem] of ['a', 'b'].entries()) {
  console.log(index, elem);
}
for (let index of ['a', 'b'].keys()) {
  console.log(index);
}
for (let elem of ['a', 'b'].values()) {
  console.log(elem);
}

console.log("---- Object ----");
console.log(Object.assign({}, {origin: "hangge.com"}));


(2)运行结果如下:
评论0