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