摘要:类型判断类型判断总结常用工具类的封装含义注意这里因为判断运行环境判断一个函数是宿主环境提供的还是用户自定义的所以缓存函数计算结果参考原码解析
类型判断
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; }
因为
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没有双向通信那么自由,而是单向的,即从父组件到子组件。 父组件->子组件:props 子组件->父组件:callback 子组件->子组件:子组件通过回调改变父组件中的状态,通过props再修改另一个组件的状态 父子组件间通信 var CalendarControl = React.createClass({ getDefaultProps: function () { ...
摘要:原文链接本文内容包含以下章节本书英文版这个章节主要讨论了在游戏中经常用到的一些基础的人工智能算法。行为树是把的图转变成为一颗树结构。根据当前游戏的环境状态得到某一个行为的效用值。 作者:苏博览商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/427.html 本文内容包含以下章节: Chapter 2 ...
摘要:然而,这两个方法都只是读取对象状态,如果只是读取操作,就可以允许线程并行,这样读取效率将会提高。分配线程执行子任务执行子任务获得子任务进行完成的结果 Lock Lock接口主要操作类是ReentrantLock,可以起到synchronized的作用,另外也提供额外的功能。用Lock重写上一篇中的死锁例子 import java.util.concurrent.locks.Lock; ...
摘要:目标创建一个简单的框架的程序,实现对数据库的读取操作。的核心配置文件核心配置文件,配置数据库连接信息事物等每一个都需要在核心配置文件中注册工具类获取第一步获取对象既然有了,顾名思义,我们可以从中获得的实例。 ...
阅读 2846·2021-09-10 10:51
阅读 2214·2021-09-02 15:21
阅读 3205·2019-08-30 15:44
阅读 868·2019-08-29 18:34
阅读 1651·2019-08-29 13:15
阅读 3321·2019-08-26 11:37
阅读 2696·2019-08-26 10:46
阅读 1106·2019-08-26 10:26