本文为lodash源码分析的第6篇,后续会持续更新这个专题,欢迎指正。
依赖
import getTag from './.internal/getTag.js';
源码分析
isSymbol函数主要是用来判断value是否为Symbol类型或者对象。
function isSymbol(value) {
const type = typeof value;
return (
type === 'symbol' ||
(type === 'object' && value != null && getTag(value) === '[object Symbol]')
);
}
首先,用 typeof 判断value类型,如果是基础类型 symbol返回true。
其次,如果是Symbol包装器对象,返回true。
补充:如何得到一个Symbol包装器对象?Symbol构造函数并不支持new Symbol()语法,但是可以使用Object()函数创建,如下:
var sym = Symbol(1);
typeof sym; //symbol
var symObj = Object(sym);
typeof symObj; //object