检测函数

获取原生类型的值

返回值小写的构造函数名称,如果值为 undefined 或 null ,则返回 “undefined” 或 “null”。

const getType = v =>
  v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();
getType(new Set([1,2,3])) // "set"

是否为数组

const isArray = val => !!val && Array.isArray(val);
isArray(null) // false
isArray([1]) // true

是否为类数组

检查提供的参数是否是类数组(即可迭代)。

使用展开运算符 (...) 检查提供的参数是否可以在 try... catch 块中进行迭代,并使用逗号运算符(,)返回适当的值。

const isArrayLike = val => {
  try {
    return [...val], true;
  } catch (e) {
    return false;
  }
};
isArrayLike(document.querySelectorAll('.className')); // true
isArrayLike('abc'); // true
isArrayLike(null); // false

是否为对象

使用 Object 构造函数为给定值创建对象包装。 如果该值为 null 或 undefined ,则创建并返回一个空对象。 否则,返回一个对应于给定值的类型的对象。

const isObject = obj => obj === Object(obj);
isObject([1, 2, 3, 4]); // true
isObject([]); // true
isObject(['Hello!']); // true
isObject({ a: 1 }); // true
isObject({}); // true
isObject(true); // false

是否是有效的 JSON

使用 JSON.parse() 和 try... catch 块来检查提供的参数是否是有效的JSON。

const isValidJSON = obj => {
  try {
    JSON.parse(obj);
    return true;
  } catch (e) {
    return false;
  }
};

判断值是否为原始值

返回一个布尔值,确定专递的值是否为原始值。

在不是原始类型的字符串数组上使用 Array.includes() , 使用 typeof 提供类型。 由于 typeof null 被求值为 'object',所以需要直接比较。

const isPrimitive = val => !['object', 'function'].includes(typeof val) || val === null;
isPrimitive(undefined) // true
isPrimitive(null); // true
isPrimitive(50); // true
isPrimitive('Hello!'); // true
isPrimitive(false); // true
isPrimitive(Symbol()); // true
isPrimitive([]); // false

是否为布尔值

const isBoolean = val => typeof val === 'boolean';
isBoolean(null) // false
isBoolean(false) // true

是否为函数

const isFunction = val => val && typeof val === 'function';
isFunction('x') // false
isFunction(x => x) // true

是否为数字

const isNumber = val => typeof val === 'number';
isNumber('1') // false
isNumber(1) // true

判断是否为字符串

const isString = val => typeof val === 'string';
isString('10'); // true

是否为 symbol

const isSymbol = val => typeof val === 'symbol';
isSymbol('x') // false
isSymbol(Symbol('x')) // true

是否为类 Promise

如果一个对象看起来像一个Promise),则返回 true,否则返回 false 。

检查对象是不为 null ,它的 typeof 是否匹配 object 或 function ,如果它有.then属性,这也是一个 function 。

const isPromiseLike = obj =>
  obj !== null &&
  (typeof obj === 'object' || typeof obj === 'function') &&
  typeof obj.then === 'function';
isPromiseLike({
  then: function() {
    return '';
  }
}); // true
isPromiseLike(null); // false
isPromiseLike({}); // false

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress