lodash源码分析之createMathOperation

58 阅读1分钟

本文为lodash源码分析的第12篇,后续会持续更新这个专题,欢迎指正。

依赖

import baseToNumber from './baseToNumber.js'
import baseToString from './baseToString.js'

源码分析

createMathOperation函数的主要作用是返回一个函数,可以对两个值进行数学运算。具体的运算逻辑由operator函数提供。

function createMathOperation(operator, defaultValue) {
  return (value, other) => {
    if (value === undefined && other === undefined) {
      return defaultValue
    }
    if(value === undefined || other === undefined) {
      return value || other
    }
    if (typeof value === 'string' || typeof other === 'string') {
      value = baseToString(value)
      other = baseToString(other)
    }
    else {
      value = baseToNumber(value)
      other = baseToNumber(other)
    }
    return operator(value, other)
  }
}

该函数返回一个箭头函数,该箭头函数接受两个参数valueother,返回一个具体的值。具体的逻辑如下:

  1. 如果两个参数都是undefined,返回默认值defaultValue
  2. 如果其中一个为undefined, 返回另一个不为undefined的值;
  3. 如果其中任一个参数为string类型,调用baseToString函数转为string类型;
  4. 否则,调用baseToNumber函数把两者转为number类型;
  5. 最后,对两个参数调用operator函数,并将计算结果返回。