摘要:類型判斷類型判斷總結(jié)常用工具類的封裝含義注意這里因?yàn)榕袛噙\(yùn)行環(huán)境判斷一個(gè)函數(shù)是宿主環(huán)境提供的還是用戶自定義的所以緩存函數(shù)計(jì)算結(jié)果參考原碼解析
類型判斷
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 總結(jié)(常用工具類的封裝)
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; }
因?yàn)?br>
判斷JS運(yùn)行環(huán)境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+)/)判斷一個(gè)函數(shù)是宿主環(huán)境提供的還是用戶自定義的
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()) }緩存函數(shù)計(jì)算結(jié)果 參考
underscorejs原碼解析
https://juejin.im/post/5c601f...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107262.html
React沒(méi)有雙向通信那么自由,而是單向的,即從父組件到子組件。 父組件->子組件:props 子組件->父組件:callback 子組件->子組件:子組件通過(guò)回調(diào)改變父組件中的狀態(tài),通過(guò)props再修改另一個(gè)組件的狀態(tài) 父子組件間通信 var CalendarControl = React.createClass({ getDefaultProps: function () { ...
摘要:原文鏈接本文內(nèi)容包含以下章節(jié)本書英文版這個(gè)章節(jié)主要討論了在游戲中經(jīng)常用到的一些基礎(chǔ)的人工智能算法。行為樹是把的圖轉(zhuǎn)變成為一顆樹結(jié)構(gòu)。根據(jù)當(dāng)前游戲的環(huán)境狀態(tài)得到某一個(gè)行為的效用值。 作者:蘇博覽商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系騰訊WeTest獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。原文鏈接:https://wetest.qq.com/lab/view/427.html 本文內(nèi)容包含以下章節(jié): Chapter 2 ...
摘要:然而,這兩個(gè)方法都只是讀取對(duì)象狀態(tài),如果只是讀取操作,就可以允許線程并行,這樣讀取效率將會(huì)提高。分配線程執(zhí)行子任務(wù)執(zhí)行子任務(wù)獲得子任務(wù)進(jìn)行完成的結(jié)果 Lock Lock接口主要操作類是ReentrantLock,可以起到synchronized的作用,另外也提供額外的功能。用Lock重寫上一篇中的死鎖例子 import java.util.concurrent.locks.Lock; ...
摘要:目標(biāo)創(chuàng)建一個(gè)簡(jiǎn)單的框架的程序,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀取操作。的核心配置文件核心配置文件,配置數(shù)據(jù)庫(kù)連接信息事物等每一個(gè)都需要在核心配置文件中注冊(cè)工具類獲取第一步獲取對(duì)象既然有了,顧名思義,我們可以從中獲得的實(shí)例。 ...
閱讀 2860·2021-09-10 10:51
閱讀 2223·2021-09-02 15:21
閱讀 3216·2019-08-30 15:44
閱讀 884·2019-08-29 18:34
閱讀 1662·2019-08-29 13:15
閱讀 3334·2019-08-26 11:37
閱讀 2707·2019-08-26 10:46
閱讀 1118·2019-08-26 10:26