如何判斷JavaScript的資料型別?
本文將講解我目前所知道的判斷JavaScript
資料型別的方法。JavaScript
資料型別一共有7
種:
Undefined
Null
Boolean
String
Symbol
Number
Object
除了Object
之外的6
種屬於原始資料型別。有時,我們還會細分Object
的型別,比如Array
,Function
,Date
,RegExp
等。
typeof
typeof
可以用來區分除了Null
型別以外的原始資料型別,物件型別的可以從普通物件裡面識別出函式:
typeof undefined // "undefined" typeof null // "object" typeof 1 // "number" typeof "1" // "string" typeof Symbol() // "symbol" typeof function() {} // "function" typeof {} // "object"
問題一:typeof
不能識別null
,如何識別null
?
答案:如果想要判斷是否為null
,可以直接使用===
全等運算子來判斷(或者使用下面的Object.prototype.toString
方法):
let a = null a === null // true
問題二:typeof
作用於未定義的變數,會報錯嗎?
答案:不會報錯,返回"undefined"
。
typeof randomVariable // "undefined"
問題三:typeof Number(1)
的返回值是什麼?
答案:"number"
。注意Number
和String
作為普通函式呼叫的時候,是把引數轉化為相應的原始資料型別,也就是類似於做一個強制型別轉換的操作,而不是預設當做建構函式呼叫。注意和Array
區分,Array(...)
等價於new Array(...)
。
typeof Number(1) // "number" typeof String("1") // "string" Array(1, 2, 3) // 等價於 new Array(1, 2, 3)
問題四:typeof new Number(1)
的返回值是什麼?
答案:"object"
。
typeof new Number(1) // "object" typeof new String(1) // "object"
instanceof
instanceof
不能用於判斷原始資料型別的資料:
3 instanceof Number // false '3' instanceof String // false true instanceof Boolean // false
instanceof
可以用來判斷物件的型別:
var date = new Date() date instanceof Date // true var number = new Number() number instanceof Number // true var string = new String() string instanceof String // true
需要注意的是,instanceof
的結果並不一定是可靠的,因為在ECMAScript7
規範中可以透過自定義Symbol.hasInstance
方法來覆蓋預設行為。詳情參見。
Object.prototype.toString
Object.prototype.toString.call(undefined).slice(8, -1) // "Undefined" Object.prototype.toString.call(null).slice(8, -1) // "Null" Object.prototype.toString.call(3).slice(8, -1) // "Number" Object.prototype.toString.call(new Number(3)).slice(8, -1) // "Number" Object.prototype.toString.call(true).slice(8, -1) // "Boolean" Object.prototype.toString.call('3').slice(8, -1) // "String" Object.prototype.toString.call(Symbol()).slice(8, -1) // "Symbol"
由上面的示例可知,該方法沒有辦法區分數字型別和數字物件型別,同理還有字串型別和字串物件型別、布林型別和布林物件型別。
另外,ECMAScript7
規範定義了符號Symbol.toStringTag
,你可以透過這個符號自定義Object.prototype.toString
方法的行為:
'use strict' var number = new Number(3) number[Symbol.toStringTag] = 'Custom' Object.prototype.toString.call(number).slice(8, -1) // "Custom" function a () {} a[Symbol.toStringTag] = 'Custom' Object.prototype.toString.call(a).slice(8, -1) // "Custom" var array = [] array[Symbol.toStringTag] = 'Custom' Object.prototype.toString.call(array).slice(8, -1) // "Custom"
因為Object.prototype.toString
方法可以透過Symbol.toStringTag
屬性來覆蓋預設行為,所以使用這個方法來判斷資料型別也不一定是可靠的。
Array.isArray
Array.isArray(value)
可以用來判斷value
是否是陣列:
Array.isArray([]) // true Array.isArray({}) // false (function () {console.log(Array.isArray(arguments))}()) // false
總結
本文講解了我目前所知道的判斷JavaScript
資料型別的方法,希望大家能有所收穫。如果本文有什麼錯誤或者不嚴謹的地方,歡迎在評論區留言。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2814568/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript的資料型別如何判斷JavaScript資料型別
- JavaScript判斷資料型別JavaScript資料型別
- javascript 判斷各種資料的型別JavaScript型別
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別
- JavaScript資料型別判斷的四種方法JavaScript資料型別
- 我所知道的JavaScript中判斷資料型別JavaScript資料型別
- javascript中如何判斷變數的型別?JavaScript變數型別
- js資料型別的判斷JS資料型別
- 判斷值的資料型別資料型別
- js判斷資料型別JS資料型別
- js資料型別及判斷JS資料型別
- Javascript判斷資料型別的五種方式及其特殊性JavaScript資料型別
- PHP 資料型別之檢視和判斷資料型別PHP資料型別
- python3 判斷資料型別Python資料型別
- 判斷a是否是int型別資料型別
- JS資料型別判斷的幾種方法JS資料型別
- 如何判斷變數型別變數型別
- JavaScript 判斷瀏覽器的型別和版本JavaScript瀏覽器型別
- javascript中對變數型別的判斷方法JavaScript變數型別
- JavaScript判斷變數型別的四種方法JavaScript變數型別
- JS資料型別分類和判斷JS資料型別
- 深入理解 JavaScript 中的型別和型別判斷問題JavaScript型別
- 判斷javaScript變數是Ojbect型別還是Array型別JavaScript變數型別
- 判斷js中的資料型別的幾種方法JS資料型別
- JavaScript中的型別判斷,瞭解一下?JavaScript型別
- 使用帶型別判斷的比較判斷型別
- js判斷型別JS型別
- JS 型別判斷JS型別
- 【JavaScript 學以致用】值的判斷以及型別轉換JavaScript型別
- 最安全的型別判斷型別
- js中的型別判斷JS型別
- 聊一下關於判斷資料型別資料型別
- 前端基礎——js資料型別及判斷方法前端JS資料型別
- 前幾天為了精準判斷物件型別,封裝一個高大上的資料型別的判斷,裝個逼物件封裝資料型別
- javaScript的資料型別JavaScript資料型別
- 如何判斷沒有字尾的檔案型別?型別
- JavaScript判斷當前裝置和瀏覽器型別JavaScript瀏覽器型別
- JavaScript 判斷 iPhone X Series 機型JavaScriptiPhone