摘要:如果想要檢查原始數(shù)據(jù)類型之外的任何內(nèi)容,我們可能一些額外的檢查技巧,例如判斷構(gòu)造函數(shù)。它們實(shí)際上是對(duì)象,會(huì)為它們返回要知道某個(gè)東西是否真的是數(shù)組,可以將其構(gòu)造函數(shù)與數(shù)組進(jìn)行比較。是對(duì)象,因此唯一需要檢查的是構(gòu)造函數(shù)是否為。
Javascript中檢查數(shù)據(jù)類型一直是老生常談的問題,今天俺看了一篇國(guó)外的文章總結(jié)了實(shí)際開發(fā)中常見的幾種技巧,俺覺得講的很不錯(cuò),因此跟大家一起分享。
檢查js中數(shù)據(jù)類型不是想的那么簡(jiǎn)單。js語言中本身提供了typeof 運(yùn)算符,typeof操作符返回一個(gè)字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型。typeof操作符返回一個(gè)字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型。
然而,javascript數(shù)據(jù)類型和typeof運(yùn)算符并不完美。很多時(shí)候都不是我們預(yù)想的結(jié)果, 例如,對(duì)于數(shù)組和null,返回“object”。如果想要檢查原始數(shù)據(jù)類型之外的任何內(nèi)容,我們可能一些額外的檢查技巧,例如判斷構(gòu)造函數(shù)。
String
字符串總是一個(gè)字符串,所以檢查字符串很簡(jiǎn)單。 如果使用new(new String)調(diào)用,typeof將返回“object”。 所以也要包含那些可以使用的字符串instanceof。
function isString (value) { return typeof value === "string" || value instanceof String; }
Number
從typeof中得到的不僅僅是一個(gè)普通的數(shù)字,還會(huì)返回“number”,比如NaN和Infinity。要知道一個(gè)值是否真的是一個(gè)數(shù)字,還需要使用isFinite來判斷數(shù)字是否有限。
function isNumber (value) { return typeof value === "number" && isFinite(value); }
Array
在javascript中,數(shù)組不像在java和其他語言中那樣是真正的數(shù)組。它們實(shí)際上是對(duì)象,typeof會(huì)為它們返回"object"要知道某個(gè)東西是否真的是數(shù)組,可以將其構(gòu)造函數(shù)與數(shù)組進(jìn)行比較。
function isArray (value) { return value && typeof value === "object" && value.constructor === Array; } // ES5可以使用該方法 IE9以上 Array.isArray(value);
Function
在js中判斷函數(shù)使用typeof就可以了。
function isFunction (value) { return typeof value === "function"; }
Object
javascript中的很多東西都是對(duì)象。要知道一個(gè)值是否是一個(gè)可以具有屬性并循環(huán)遍歷的對(duì)象,可以將其構(gòu)造函數(shù)與對(duì)象進(jìn)行比較。它不適用于用class創(chuàng)建的對(duì)象,使用class創(chuàng)建的對(duì)象可以使用instanceof操作符來判斷。
function isObject (value) { return value && typeof value === "object" && value.constructor === Object; }
Null 和 undefined
大多數(shù)時(shí)候,您不需要顯式地檢查null和undefined,因?yàn)樗鼈兌际羌僦?。不過,在下面的函數(shù)中這樣做就可以了。
// Returns if a value is null function isNull (value) { return value === null; } // Returns if a value is undefined function isUndefined (value) { return typeof value === "undefined"; }
Boolean
對(duì)于boolean typeof檢查符也足夠用來檢查了。
// Returns if a value is a boolean function isBoolean (value) { return typeof value === "boolean"; }
RegExp
RegExp是對(duì)象,因此唯一需要檢查的是構(gòu)造函數(shù)是否為RegExp。
// Returns if a value is a regexp function isRegExp (value) { return value && typeof value === "object" && value.constructor === RegExp; }
Error
javascript中的錯(cuò)誤與許多其他編程語言中的“異?!毕嗤K鼈冇袃煞N不同的形式,例如Error、TypeError和RangeError。對(duì)于它們來說,一個(gè)instanceof語句就足夠了,但是為了確保我們還檢查了錯(cuò)誤具有的“message”屬性。
// Returns if value is an error object function isError (value) { return value instanceof Error && typeof value.message !== "undefined"; }
Date
Date在javascript中并不是真正的數(shù)據(jù)類型。但是要知道某個(gè)對(duì)象是否是Date對(duì)象,可以使用instanceof進(jìn)行檢查。
// Returns if value is a date object function isDate (value) { return value instanceof Date; }
Symbol
ES6新增的Symbol,用typeof就足夠了。
// Returns if a Symbol function isSymbol (value) { return typeof value === "symbol"; }
歡迎大家一起學(xué)習(xí)討論,歡迎訪問我的博客。
原文鏈接:https://www.pipipi.net/code/1...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106453.html
摘要:大多數(shù)情況下,可以是同局部變量完成相同的事情而不引入新的作用域。選擇正確的方法避免不必要的屬性查找一旦多次用到屬性對(duì)象,應(yīng)該將其存儲(chǔ)在局部變量中。盡可能多的使用局部變量將屬性查找替換為值查找。 1、可維護(hù)性 1.1 可維護(hù)代碼特征 1. 可理解性 2. 直觀性 3. 可適應(yīng)性 4. 可擴(kuò)展性 5. 可調(diào)試性 1.2 代碼約定 1、可讀性(代碼縮進(jìn)和代碼注釋) 2、變量和函數(shù)命名 變量...
摘要:譯者按最近依舊如火如荼相信大家都躍躍欲試我們團(tuán)隊(duì)也開始在領(lǐng)域有所嘗試年應(yīng)該是逐漸走向成熟的一年讓我們一起來看看國(guó)外的開發(fā)者們都總結(jié)了哪些最佳實(shí)踐年在全世界都有很多關(guān)于新的更新和開發(fā)者大會(huì)的討論關(guān)于去年的重要事件請(qǐng)參考那么年最有趣的問題來了我 譯者按:最近React(web/native)依舊如火如荼,相信大家都躍躍欲試,我們團(tuán)隊(duì)也開始在React領(lǐng)域有所嘗試. 2016年應(yīng)該是Reac...
摘要:想要簡(jiǎn)單點(diǎn)難道我深拷貝一個(gè)變量還要引入這么麻煩嗎沒有簡(jiǎn)單點(diǎn)的辦法嗎嗯,可能有點(diǎn)不是那么酷炫,但是他確實(shí)可以滿足要求,而且也無須引入其他的庫(kù)。 問題 由于 js 的傳參方式有時(shí)會(huì)遇到這樣的場(chǎng)景: function setTime(data) { let result = {}; result.obj = data.obj || {}; result.obj.time = Da...
摘要:也就是說避免屬性查找或其他的操作。簡(jiǎn)化循環(huán)體循環(huán)體是執(zhí)行最多的,所以要確保其被最大限度地優(yōu)化。代碼組織組織代碼要考慮到可維護(hù)性并不一定是傳送給瀏覽器的最好方式。 最佳實(shí)踐 可維護(hù)性 什么是可維護(hù)性的代碼 如果說代碼是可維護(hù)的,它需要遵循以下特點(diǎn) 可理解性——其他人可以接手代碼并理解它的意圖和一般途徑,而無需原開發(fā)人員的完整解釋。 直觀性——代碼中的東西一看就能明白,不管其操作過程多...
摘要:今年年初,由于控制臺(tái)中的配置錯(cuò)誤,特斯拉被一個(gè)惡意挖掘加密貨幣的軟件所感染。為了幫助您完成這項(xiàng)工作,本文將為您介紹項(xiàng)安全最佳實(shí)踐。授權(quán)失敗可能意味著攻擊者試圖濫用被盜憑據(jù)。 上個(gè)月,全球最受歡迎的容器編排引擎Kubernetes,被爆出首個(gè)嚴(yán)重的安全漏洞,使得整個(gè)Kubernetes生態(tài)發(fā)生震蕩。該漏洞(CVE-2018-1002105)使攻擊者能夠通過Kubernetes API服務(wù)...
閱讀 2767·2021-11-24 09:39
閱讀 1657·2021-09-28 09:35
閱讀 1130·2021-09-06 15:02
閱讀 1324·2021-07-25 21:37
閱讀 2737·2019-08-30 15:53
閱讀 3656·2019-08-30 14:07
閱讀 725·2019-08-30 11:07
閱讀 3530·2019-08-29 18:36