1、解构赋值数组长度

平时我们获取数组的长度,习惯于const length = array.length,现在可以直接使用解构赋值:const { length } = array,但这前提是你必须用length作为变量了,不喜欢也可以用别名const { length: len } = array,但这好像有点过于装杯略显繁琐了哈····

2、嵌套for循环中,如何跳出循环?

  1. outloop: // 定义跳出标记
  2. for (let i = 0; i < 4; i++) {
  3. console.log(i)
  4. for (let j = 0; j < 3; j++) {
  5. console.log("hah" + j)
  6. if (j == 1) {
  7. break outloop // 跳出到指定标记,不再执行
  8. // continue outloop 跳出到指定标记,重新执行
  9. }
  10. };
  11. }

3、>>> 0妙用

  1. length = start > end ? 0 : ((end - start) >>> 0)
  2. start >>>= 0

>>>是无符号位右移,移位操作符在移位前做了两种转换:第一将不是number类型的数据转换为number,第二将number转换为无符号的32bit数据,也就是Uint32类型。这些与移位的位数无关。
>>> 0移动0位就是用了js的内部特性做了前两种转换, 如不能转换为Number就为0,非整数转为整数,负数转为负数 + 2的32次方,说白了就是确保这个变量是一个自然数。

  1. 1 >>> 0 // 1
  2. 16 >>> 0 // 16
  3. -1 >>> 0 // 4294967295
  4. 1.34 >>> 0 // 1
  5. '1.34' >>> 0 // 1
  6. Function >>> 0 // 0
  7. {} >>> 0 // 0
  8. null >>> 0 // 0
  9. undefined >>> 0 // 0
  10. false >>> 0 // 0
  11. '' >>> 0 // 0

详细请参照:http://c.biancheng.net/view/5471.html

同时,在slice.js源码中还出现了start >>>= 0>>>=这个是右移赋值符号,相当于start = start >>> 0简写(类比JS中的+=,-=)

4、!!

  1. // 检查'value'是否是扁平的或者'arguments'对象或者数组。
  2. function isFlattenable(value) {
  3. return isArguments(value) || Array.isArray(value) ||
  4. !!(value && value[spreadableSymbol])
  5. }

!!作用类似单个!,强制转换成Boolean(唯一不同还可以防止在一个变量没有声明的时候,也能保证得到的是false)。

5、…rest运算符

...rest运算符可以快速获取数组中的第一个值或者除数组中第一值以外剩下全部的值

  1. const array = [1, 2, 3]
  2. const [ head, ...tail ] = array
  3. console.log(head) // 1
  4. console.log(tail) //[2, 3]

lodash v5中已废除的方法

  • 废除_.fill。直接用原生Array.prototype.fill
  • 废除_.findIndex。直接用原生Array.prototype.findIndex
  • 废除_.fromPairs:返回一个由键值对pairs构成的对象。直接用ES10的Object.prototype.fromEntries()
  • 废除_.join:将 array 中的所有元素转换为由 separator 分隔的字符串。直接用Array.prototype.join()
  • 废除_.reverse:反转array。直接用Array.prototype.reverse()

    可以(暂未)废除的方法

  • _.flatten(array):减少一级array嵌套深度。可以使用ES10的Array.prototype.flat()实现

  • _.flattenDepth(array, [depth=1]):根据 depth 递归减少 array 的嵌套层级。可以使用ES10的Array.prototype.flat(depth )实现
  • _.flattenDeep(array):将array递归为一维数组。可以使用ES10的Array.prototype.flat(Infinity)实现
  • _.indexOf(array, value, [fromIndex=0]):使用SameValueZero 等值比较,返回首次 value 在数组array中被找到的索引值,如果 fromIndex 为负值,将从数组array尾端索引进行匹配。没有找到为返回-1。可以直接用Array.prototype.indexOf()
  • _.initial(array):去除数组array中的最后一个元素。直接用Array.prototype.slice(0, -1)实现
  • _.last(array):获取array中的最后一个元素。直接用Array.prototype.pop()或slice(-1)实现
  • _.lastIndexOf(array, value, [fromIndex=array.length-1]):从右开始遍历数组,返回匹配值的索引值,否则返回 -1。直接用Array.prototype.lastIndexOf()实现
  • _.slice(array, [start=0], [end=array.length]):裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。直接用Array.prototype.slice()实现
  • _.take(array, [n=1]):创建一个数组切片,从array数组的起始元素开始提取n个元素。直接用Array.prototype.slice()实现
  • _.uniq(array):创建一个去重后的array数组副本。使用了SameValueZero 做等值比较。只有第一次出现的元素才会被保留。可以使用ES6的new Set(array)去重