【源码阅读 | xe-utils源码 | 05】判断ES6中的新类型

1. 背景

  对于 isSymbolisMap 等新特性中才有的类型的判断时,比起普通类型判断,源码中会多了对当前环境是否支持新类型的判断。
  其中用到类似思路的有如下函数:

  • isFormData
  • isSymbol
  • isMap
  • isWeakMap
  • isSet
  • isWeakSet

2. 源码解析

isSymbol为例,如下判断思路为:

  • 先判断当前环境是否支持 Symbol 类型,若不支持则会返回 undefined 常量
  • 若支持 Symbol,则判断是否拥有 isSymbol 方法,若有则用该方法检验
  • 若无isSymbol方法,则用 typeof 方法(因为 Symbol 属于 ES6 中的基础数据类型,因此可以通过 typeof 判断得到)
/* eslint-disable valid-typeof */
var staticStrUndefined = require("./staticStrUndefined");

var supportSymbol = typeof Symbol !== staticStrUndefined;
function isSymbol(obj) {
  return supportSymbol && Symbol.isSymbol
    ? Symbol.isSymbol(obj)
    : typeof obj === "symbol";
}

module.exports = isSymbol;

  开头提到的其他校验方法,与 isSymbol 大同小异,现在来看就很容易理解了,见下:

// isFormData.js
/* eslint-disable valid-typeof */
var staticStrUndefined = require('./staticStrUndefined')

var supportFormData = typeof FormData !== staticStrUndefined
function isFormData (obj) {
  return supportFormData && obj instanceof FormData
}

module.exports = isFormData
// isMap.js
/* eslint-disable valid-typeof */
var staticStrUndefined = require('./staticStrUndefined')

var supportMap = typeof Map !== staticStrUndefined
function isMap(obj) {
  return supportMap && obj instanceof Map
}

module.exports = isMap
// isSet.js
/* eslint-disable valid-typeof */
var staticStrUndefined = require('./staticStrUndefined')

var supportSet = typeof Set !== staticStrUndefined
function isSet(obj) {
  return supportSet && obj instanceof Set
}

module.exports = isSet
// isWeakMap.js
/* eslint-disable valid-typeof */
var staticStrUndefined = require('./staticStrUndefined')

var supportWeakMap = typeof WeakMap !== staticStrUndefined

function isWeakMap(obj) {
  return supportWeakMap && obj instanceof WeakMap
}

module.exports = isWeakMap
// isWeakMap.js
/* eslint-disable valid-typeof */
const isWeakMap = require('./isWeakMap')
var staticStrUndefined = require('./staticStrUndefined')

var supportWeakSet = typeof WeakSet !== staticStrUndefined
function isWeakSet(obj) {
  return supportWeakSet && obj instanceof WeakSet
}

module.exports = isWeakSet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值