ES6相关能用到的东西

const

之前的理解不对,正确如下

变量指向的内存地址所保存的数据不变,对于数值型字符串布尔值这些简单类型的数据,值就保存在变量指向的内存地址中,

但是对于复合型数据,变量指向的内存地址中保存的是指向实际数据的指针,所以指针是固定的,指向目标内的内存地址中的数据是可以改变的。

字符串新方法

includes():返回布尔值,表示是否找到了参数字符串。

startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。

endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

数值型新方法

 Number.isFinite()用来检查一个数值是否为有限的(finite)。

如果参数类型不是数值,Number.isFinite一律返回false

可以用来做数值型check。

Number.parseInt()    Number.parseFloat()

ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。

Number.isInteger()用来判断一个数值是否为整数。

Math.sign()方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

Math.sign('9') // +1

 **ES2016 新增了一个指数运算符(**)。

 这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。

函数的扩展

结构配合函数的默认值。

function fetch(url, { body = '', method = 'GET', headers = {} } = {}) {
  console.log(method);
}

fetch('http://example.com')

 箭头函数不适用场景

第一个场合是定义对象的方法,且该方法内部包括this

const cat = {
  lives: 9,
  jumps: () => {
    this.lives--;
  }
}

上面代码中,cat.jumps()方法是一个箭头函数,这是错误的。调用cat.jumps()时,如果是普通函数,该方法内部的this指向cat;如果写成上面那样的箭头函数,使得this指向全局对象,因此不会得到预期结果。这是因为对象不构成单独的作用域,导致jumps箭头函数定义时的作用域就是全局作用域。

箭头函数没有自己的this而是引用外层的this。

第二个场合是需要动态this的时候,也不应使用箭头函数。

var button = document.getElementById('press');
button.addEventListener('click', () => {
  this.classList.toggle('on');
});

上面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。

另外,如果函数体很复杂,有许多行,或者函数内部有大量的读写操作,不单纯是为了计算值,这时也不应该使用箭头函数,而是要使用普通函数,这样可以提高代码可读性。

尾递归尾调用优化

数组的扩展

扩展运算符

赋值解构

function f(x, y, z) {
  // ...
}

let args = [0, 1, 2, 3];
f(...args);

深拷贝数组

const a1 = [1, 2];
// 写法一
const a2 = [...a1];
// 写法二
const [...a2] = a1;

合并数组

const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
[...arr1, ...arr2, ...arr3]

字符串转数组

[...'hello']
// [ "h", "e", "l", "l", "o" ]

对象转数组 可以使用map等方法

let nodeList = document.querySelectorAll('div');
let array = [...nodeList];

Array.from

任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。

可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.from([1, 2, 3], (x) => x * x)

copyWithin()

它接受三个参数。

  • target(必需):从该位置开始替换数据。如果为负值,表示倒数。
  • start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
  • end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。

这三个参数都应该是数值,如果不是,会自动转为数值。

[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]
原文地址:https://www.cnblogs.com/have-a-try/p/13534070.html