个人觉得本期更像是自己对基础的一个查缺补漏,可以把一些常用的函数用到自己的项目中。

记录几个印象比较深的函数。

1、toNumber:以前自己的写法不严谨

  1. const toNumber = (val) => {
  2. const n = parseFloat(val);
  3. return isNaN(n) ? val : n;
  4. };
  5. // 之前自己都会这样写
  6. const toNumber = (val) => {
  7. return Number(val)
  8. };

2、globalThis:对于globalThis的判断非常的严格,要考虑这么多的边界条件

  1. let _globalThis;
  2. const getGlobalThis = () => {
  3. return (_globalThis ||
  4. (_globalThis =
  5. typeof globalThis !== 'undefined'
  6. ? globalThis
  7. : typeof self !== 'undefined'
  8. ? self
  9. : typeof window !== 'undefined'
  10. ? window
  11. : typeof global !== 'undefined'
  12. ? global
  13. : {}));
  14. };

3、isPromise:对于Promise的的判断更加严格

  1. const isPromise = (val) => {
  2. return isObject(val) && isFunction(val.then) && isFunction(val.catch);
  3. };

4、转成字符串方法判断对象

  1. const objectToString = Object.prototype.toString;
  2. const toTypeString = (value) => objectToString.call(value);
  3. const isPlainObject = (val) => toTypeString(val) === '[object Object]';

5、外加一些其他类型的判断

  1. const isDate = (val) => val instanceof Date;
  2. const isFunction = (val) => typeof val === 'function';
  3. const isString = (val) => typeof val === 'string';
  4. const isSymbol = (val) => typeof val === 'symbol';
  5. const isObject = (val) => val !== null && typeof val === 'object';

6、对于类型判断这样更加严谨

  1. var typeObject = {};
  2. "Boolean Number String Function Array Date RegExp Object Error Null Undefined".split(" ").map(function (item, index) {
  3. typeObject["[object " + item + "]"] = item.toLowerCase();
  4. })
  5. function type(obj) {
  6. if (obj == null) {
  7. return obj + "";
  8. }
  9. return typeof obj === "object" || typeof obj === "function" ?
  10. typeObject[Object.prototype.toString.call(obj)] || "object" :
  11. typeof obj;
  12. }
  13. // isFunction封装
  14. function isFunction(obj) {
  15. return type(obj) === "function";
  16. }
  17. // isObject封装
  18. function isObject(obj) {
  19. return type(obj) === "object";
  20. }

7、参考链接

1、https://juejin.cn/post/6994976281053888519#heading-37