成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

學(xué)習(xí)筆記:util

chenjiang3 / 3333人閱讀

摘要:類型判斷類型判斷總結(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

相關(guān)文章

  • “React組件間通信”學(xué)習(xí)筆記

    React沒(méi)有雙向通信那么自由,而是單向的,即從父組件到子組件。 父組件->子組件:props 子組件->父組件:callback 子組件->子組件:子組件通過(guò)回調(diào)改變父組件中的狀態(tài),通過(guò)props再修改另一個(gè)組件的狀態(tài) 父子組件間通信 var CalendarControl = React.createClass({ getDefaultProps: function () { ...

    darcrand 評(píng)論0 收藏0
  • 游戲人工智能 讀書筆記 (四) AI算法簡(jiǎn)介——Ad-Hoc 行為編程

    摘要:原文鏈接本文內(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 ...

    xinhaip 評(píng)論0 收藏0
  • <jdk7學(xué)習(xí)筆記>讀書筆記-并行api

    摘要:然而,這兩個(gè)方法都只是讀取對(duì)象狀態(tài),如果只是讀取操作,就可以允許線程并行,這樣讀取效率將會(huì)提高。分配線程執(zhí)行子任務(wù)執(zhí)行子任務(wù)獲得子任務(wù)進(jìn)行完成的結(jié)果 Lock Lock接口主要操作類是ReentrantLock,可以起到synchronized的作用,另外也提供額外的功能。用Lock重寫上一篇中的死鎖例子 import java.util.concurrent.locks.Lock; ...

    bovenson 評(píng)論0 收藏0
  • JAVA學(xué)習(xí)筆記036-第一個(gè)簡(jiǎn)單的Mybatis程序(代碼經(jīng)驗(yàn)證)

    摘要:目標(biāo)創(chuàng)建一個(gè)簡(jiǎn)單的框架的程序,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀取操作。的核心配置文件核心配置文件,配置數(shù)據(jù)庫(kù)連接信息事物等每一個(gè)都需要在核心配置文件中注冊(cè)工具類獲取第一步獲取對(duì)象既然有了,顧名思義,我們可以從中獲得的實(shí)例。 ...

    itvincent 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<