本文为lodash源码分析的第15篇,后续会持续更新这个专题,欢迎指正。
依赖
import isArguments from '../isArguments.js'
源码分析
isFlattenable函数的作用是,检查value是否可以被展平。即,value是否为数组、arguments对象或者实现了Symbol.isConcatSpreadable属性的对象。
const spreadableSymbol = Symbol.isConcatSpreadable
function isFlattenable(value) {
return Array.isArray(value) || isArguments(value) ||
!!(value && value[spreadableSymbol])
}
补充:
Symbol.isConcatSpreadable符号用于配置某对象作为 Array.prototype.concat() 方法的参数时是否展开其数组元素。
var alpha = ["a", "b", "c"], numeric = [1, 2, 3];
//默认情况下
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // 结果:['a', 'b', 'c', 1, 2, 3]
//重置`Symbol.isConcatSpreadable`为`false`:
numeric[Symbol.isConcatSpreadable] = false;
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // 结果:['a', 'b', 'c', [1, 2, 3] ]