资讯专栏INFORMATION COLUMN

学习笔记:util

chenjiang3 / 3184人阅读

摘要:类型判断类型判断总结常用工具类的封装含义注意这里因为判断运行环境判断一个函数是宿主环境提供的还是用户自定义的所以缓存函数计算结果参考原码解析

类型判断

1.
https://github.com/chenshenha...

/**
 * 类型判断
 * @type {Object}
 */
let UtilType = {
  isPrototype: function( data ) {
    return Object.prototype.toString.call(data).toLowerCase();
  },

  isJSON: function( data ) {
    return this.isPrototype( data ) === "[object object]";
  },

  isFunction: function( data ) {
    return this.isPrototype( data ) === "[object function]";
  }
}

2.
javascript 总结(常用工具类的封装)
3.isaacs/core-util-is

function isArray(arg) {
  if(Array.isArray) {
    return Array.isArray(arg);
  }
  return objectToString(arg) === "[object Array]"
}
exports.isArray = isArray;

function isBoolean(arg) {
  return typeof arg === "boolean";
}
exports.isBoolean = isBoolean;

function isNull(arg) {
  return arg === null;
}
exports.isNull = isNull;

function isNullOrUndefined(arg) {
  return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;

function isNumber(arg) {
  return typeof arg === "number";
}
exports.isNumber = isNumber;

function isString(arg) {
  return typeof arg === "string";
}
exports.isString = isString;

function isSymbol(arg) {
  return typeOf arg === "symbol";
}
exports.isSymbol = isSymbol;

function  isUndefined(arg) {
  return arg === void 0;
}
exports.isUndefined = isUnderfined;

function isRegExp(re) {
  return objectToString(re) === "[object RegExp]";
}
exports.isRegExp = isRegExp;

function isObject(arg) {
  return typeOf arg === "object" && arg !== null;
}
exports.isObject = isObject;

function isDate(d) {
  return obejectToString(d) === "[object Date]";
}
exports.isDate = isDate;

function isError(e) {
  return (objectToString(e) === "[object Error]" || e instanceof Error);
}
exports.isError = isEerror;

function isFunction(arg) {
  return typeof arg === "function";
}
exports.isFunction = isFunction;

function isPrimitive(arg) {
  return arg === null ||
         typeof arg === "boolean" ||
         typeof arg === "number" ||
         typeof arg === "string" ||
         typeof arg === "symbol" ||//ES6 symbol
         typeof arg === "undefined";
}
exports.isPrimitive = isPrimitive;

exports.isBuffer = Buffer.isBuffer;

function objectToString(o) {
  return Object.prototype.toString.call(o);
}

javascript:void(0) 含义
注意这里

function isObject(arg) {
  return typeOf arg === "object" && arg !== null;
}

因为

判断JS运行环境
const inBrowser = typeof window !== "undefined"

const inWeex = typeof WXEnvironment !== "undefined" && !!WXEnvironment.platform
const weexPlatform = inWeex && WXEnvironment.platform.toLowerCase()

const UA = inBrowser && window.navigator.userAgent.toLowerCase()

const isIE = UA && /msie|trident/.test(UA)
const isIE9 = UA && UA.indexOf("msie 9.0") > 0
const isEdge = UA && UA.indexOf("edge/") > 0
const isAndroid = (UA && UA.indexOf("android") > 0) || (weexPlatform === "android")
const isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === "ios")
const isChrome = UA && /chrome/d+/.test(UA) && !isEdge
const isPhantomJS = UA && /phantomjs/.test(UA)
const isFF = UA && UA.match(/firefox/(d+)/)
判断一个函数是宿主环境提供的还是用户自定义的
console.log.toString()
// "function log() { [native code] }"

function fn(){}
fn.toString()
// "function fn(){}"

// 所以
function isNative (Ctor){
  return typeof Ctor === "function" && /native code/.test(Ctor.toString())
}
缓存函数计算结果 参考

underscorejs原码解析
https://juejin.im/post/5c601f...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107262.html

相关文章

  • “React组件间通信”学习笔记

    React没有双向通信那么自由,而是单向的,即从父组件到子组件。 父组件->子组件:props 子组件->父组件:callback 子组件->子组件:子组件通过回调改变父组件中的状态,通过props再修改另一个组件的状态 父子组件间通信 var CalendarControl = React.createClass({ getDefaultProps: function () { ...

    darcrand 评论0 收藏0
  • 游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程

    摘要:原文链接本文内容包含以下章节本书英文版这个章节主要讨论了在游戏中经常用到的一些基础的人工智能算法。行为树是把的图转变成为一颗树结构。根据当前游戏的环境状态得到某一个行为的效用值。 作者:苏博览商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/427.html 本文内容包含以下章节: Chapter 2 ...

    xinhaip 评论0 收藏0
  • <jdk7学习笔记>读书笔记-并行api

    摘要:然而,这两个方法都只是读取对象状态,如果只是读取操作,就可以允许线程并行,这样读取效率将会提高。分配线程执行子任务执行子任务获得子任务进行完成的结果 Lock Lock接口主要操作类是ReentrantLock,可以起到synchronized的作用,另外也提供额外的功能。用Lock重写上一篇中的死锁例子 import java.util.concurrent.locks.Lock; ...

    bovenson 评论0 收藏0
  • JAVA学习笔记036-第一个简单的Mybatis程序(代码经验证)

    摘要:目标创建一个简单的框架的程序,实现对数据库的读取操作。的核心配置文件核心配置文件,配置数据库连接信息事物等每一个都需要在核心配置文件中注册工具类获取第一步获取对象既然有了,顾名思义,我们可以从中获得的实例。 ...

    itvincent 评论0 收藏0
  • Tomcat 学习笔记(2) - 使用 jsvc 启动tomcat

    摘要:操作系统只用权限才能监听已下的端口。虽然我们可以让启动后以用户的权限工作。我们还可以指定启动是的总之我们可以更精细的控制的运行方式。只有该版本的是绑定到二进制发行版中。这意味着它要与该版本的一同使用。 jsvc 是个什么是么高端武器呢 全称:Java Service 还是没有弄明白是什么,那就继续往下看。 我们赞不讨论 tomcat 应不应该运行在80端口上。 假如我们有需求,需要 ...

    philadelphia 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<