js 數(shù)據(jù)類型判斷的方法
typeof
一般用于判斷基本數(shù)據(jù)類型,用于判斷引用數(shù)據(jù)類型和null時會發(fā)生意外的錯誤
typeof 1 // numbertypeof ’1’ // stringtypeof true // booleantypeof Symbol(’1’) // symboltypeof undefined // undefinedtypeof function(){} // functiontypeof { a: 1 } // objecttypeof [1, 2, 3] // object 這里會判斷異常,建議使用Array.isArray區(qū)分?jǐn)?shù)組和對象//以下也會判斷異常typeof new Boolean(true) === ’object’;typeof new Number(1) === ’object’;typeof new String(’abc’) === ’object’;//最后來看nulltypeof null // object
來看下typeof的原理:不同的對象在底層都表示為二進制,在js里二進制前三位都為0的會 被判斷為object類型,null的二進制表示全0(對應(yīng)機器碼的null指針,一般為全0),所以會被判斷成object類型。
instanceof
它的主要作用是用來判斷一個實例是否屬于某種類型,用于判斷對象很合適
語法:object instanceof constructor object 某個實例對象 constructor 某個構(gòu)造函數(shù)’abc’ instanceof String //false 檢查原型鏈會返回undefinednew String(’abc’) instanceof String //truenew Boolean(true) instanceof Boolean // true new Number(1) instanceof Number // true順便做一下簡單實現(xiàn)function new_instance_of(leftVaule, rightVaule) { let leftProto = leftVaule.__proto__; // 取左表達式的__proto__值 let rightPrototype = rightVaule.prototype; // 取右表達式的 prototype 值 while (true) { if (leftProto === null) { return false; } if (rightPrototype === rightProto) { return true; } leftProto = leftProto.__proto__ }}
constructor
根據(jù)數(shù)據(jù)類型的構(gòu)造函數(shù)返回類型,但是由于null和undefined沒有構(gòu)造函數(shù)故無法判斷
’’.constructor == String //true new Number(1).constructor == Number //true new Function().constructor == Function //true true.constructor == Boolean //truenew Date().constructor == Date //true
Object.prototype.toString.call()
可以通過 toString() 來獲取每個對象的類型。為了每個對象都能通過Object.prototype.toString() 來檢測,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式來調(diào)用,傳遞要檢查的對象作為第一個參數(shù)。
var toString = Object.prototype.toString;toString.call(new Date); // [object Date]toString.call(new String); // [object String]toString.call(Math); // [object Math]toString.call(undefined); // [object Undefined]toString.call(null); // [object Null]
lodash.getTag和lodash.baseGetTag
baseGetTag使用Object.prototype.toString.call和Symbol.toStringTag來判斷屬性的類型Symbol.toStringTag只適合做特定的類型判斷
//lodash.baseGetTag部分重要源碼//如果值是undefined和null返回對應(yīng)tag if (value == null) { return value === undefined ? ’[object Undefined]’ : ’[object Null]’ } // 如果不支持Symbol或者value值上面沒有Symbol.toStringTag屬性, //直接返回Object.prototype.toString調(diào)用后的值 if (!(symToStringTag && symToStringTag in Object(value))) { return toString.call(value) }
以上就是js 數(shù)據(jù)類型判斷的方法的詳細(xì)內(nèi)容,更多關(guān)于js 數(shù)據(jù)類型判斷的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Python使用oslo.vmware管理ESXI虛擬機的示例參考2. Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫進行日期格式化的實現(xiàn)方法3. 一篇文章帶你了解JavaScript-對象4. javascript設(shè)計模式 ? 建造者模式原理與應(yīng)用實例分析5. IntelliJ IDEA設(shè)置條件斷點的方法步驟6. Java構(gòu)建JDBC應(yīng)用程序的實例操作7. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)8. python flask框架快速入門9. Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案10. 淺談SpringMVC jsp前臺獲取參數(shù)的方式 EL表達式
