lodash里的join、reverse、now

108 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第34天,点击查看活动详情

前言

本篇章我们了解lodash里join、reverse、now的对外导出的方法的使用和实现,在了解其源码的过程中,对比与原生方法的差异性,同时也学习方法封装的严谨性。

join

join方法主要是将“数组”中的所有元素转换为由“分隔符”分隔的字符串。

参数说明:

  • 参数1:数组类型,表示要转换的数组。
  • 参数2:字符串类型,表示分隔元素

使用如下:

_.join(['a', 'b', 'c'], '~');
// => 'a~b~c'

在实现上,该方法会对参数进行判断,只有当参数array不等于null时会调用Array.prototype.join方法,否则返回空字符串。

源码如下:

var arrayProto = Array.prototype;
var nativeJoin = arrayProto.join;

function join(array, separator) {
  return array == null ? '' : nativeJoin.call(array, separator);
}

reverse

reverse方法主要是反转参数array,使得第一个元素变为最后一个元素,第二个元素变为倒数第二个元素,依次类推。

使用如下:

var array = [1, 2, 3];
 
_.reverse(array);
// => [3, 2, 1]
 
console.log(array);
// => [3, 2, 1]

在实现上,reverse方法会对参数进行判断,只有参数不等于null是会调用Array.prototype.reverse方法,对于null则返回参数本身。 源码如下:

var arrayProto = Array.prototype;
var nativeReverse = arrayProto.reverse;

function reverse(array) {
  return array == null ? array : nativeReverse.call(array);
}

now

now方法主要是获得Unix 纪元 (1 January 1970 00:00:00 UTC) 直到现在的毫秒数。

now方法在实现上主要通过root变量去获取全局环境的Date方法去操作,root方法兼容了不同环境的全局方法提取。

源码如下:

import root from './_root.js';

var now = function() {
  return root.Date.now();
};

小结

本篇章我们通过了解join方法、reverse方法以及now方法的使用和实现,对比原生数组方法,lodash内部在实现上进行了严谨性判断和处理,这也方便了我们在实际开发中对于参数的判断。