本文为lodash源码分析的第5篇,后续会持续更新这个专题,欢迎指正。
依赖
import isSymbol from '../isSymbol.js'
源码分析
toKey函数的目的是将value转换处理成一个键名。
const INFINITY = 1 / 0
function toKey(value) {
if (typeof value === 'string' || isSymbol(value)) {
return value
}
const result = `${value}`
return (result === '0' && (1 / value) === -INFINITY) ? '-0' : result
}
定义INFINITY作为数字常量的参考。
首先,判断value类型是否为string、Symbol,是则直接返回value。这两种类型本身可以直接作为键名。
接着,将value转换成string字符串返回。
如果是value是-0,需要特殊处理。因为 数字-0、0转字符串得到的结果都是'0',所以这里-0需要单独判断处理。