摘要:本文將講解我目前所知道的判斷數(shù)據(jù)類型的方法。數(shù)據(jù)類型一共有種除了之外的種屬于原始數(shù)據(jù)類型。等價于問題四的返回值是什么答案。
本文將講解我目前所知道的判斷JavaScript數(shù)據(jù)類型的方法。
JavaScript數(shù)據(jù)類型一共有7種:
Undefined
Null
Boolean
String
Symbol
Number
Object
除了Object之外的6種屬于原始數(shù)據(jù)類型。有時,我們還會細分Object的類型,比如Array,Function,Date,RegExp等。
typeoftypeof可以用來區(qū)分除了Null類型以外的原始數(shù)據(jù)類型,對象類型的可以從普通對象里面識別出函數(shù):
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作為普通函數(shù)調(diào)用的時候,是把參數(shù)轉(zhuǎn)化為相應的原始數(shù)據(jù)類型,也就是類似于做一個強制類型轉(zhuǎn)換的操作,而不是默認當做構(gòu)造函數(shù)調(diào)用。注意和Array區(qū)分,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不能用于判斷原始數(shù)據(jù)類型的數(shù)據(jù):
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的結(jié)果并不一定是可靠的,因為在ECMAScript7規(guī)范中可以通過自定義Symbol.hasInstance方法來覆蓋默認行為。詳情參見ECMAScript7規(guī)范中的instanceof操作符。
Object.prototype.toStringObject.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"
由上面的示例可知,該方法沒有辦法區(qū)分數(shù)字類型和數(shù)字對象類型,同理還有字符串類型和字符串對象類型、布爾類型和布爾對象類型。
另外,ECMAScript7規(guī)范定義了符號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屬性來覆蓋默認行為,所以使用這個方法來判斷數(shù)據(jù)類型也不一定是可靠的。
Array.isArrayArray.isArray(value)可以用來判斷value是否是數(shù)組:
Array.isArray([]) // true Array.isArray({}) // false (function () {console.log(Array.isArray(arguments))}()) // false總結(jié)
本文講解了我目前所知道的判斷JavaScript數(shù)據(jù)類型的方法,希望大家能有所收獲。如果本文有什么錯誤或者不嚴謹?shù)牡胤剑瑲g迎在評論區(qū)留言。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98080.html
摘要:專題系列共計篇,主要研究日常開發(fā)中一些功能點的實現(xiàn),比如防抖節(jié)流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點是研究專題之函數(shù)組合專題系列第十六篇,講解函數(shù)組合,并且使用柯里化和函數(shù)組合實現(xiàn)模式需求我們需要寫一個函數(shù),輸入,返回。 JavaScript 專題之從零實現(xiàn) jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實現(xiàn)一個 jQuery 的 ext...
摘要:除和外,所有的數(shù)據(jù)類型都是可以轉(zhuǎn)化為對象,而如果是對象,就肯定有構(gòu)造函數(shù)。特性因為和沒有構(gòu)造函數(shù),因此不能用此方法來判斷。由于同一條原型繼承鏈上的各個對象的構(gòu)造函數(shù)都不一樣,因此,此方法可以區(qū)分開繼承鏈上的各個自定義數(shù)據(jù)類型。 typeof 用法示例 var arr = []; typeof arr; //object typeof(arr); //object typeo...
摘要:比如我們今天要討論的,在當中如何判斷一個數(shù)組是數(shù)組。在數(shù)組的原型鏈上也能找到構(gòu)造函數(shù)由上面的幾行代碼可以看出,使用運算符可以分辨數(shù)組和對象,可以判斷數(shù)組是數(shù)組。用判斷實例化的數(shù)組擁有一個屬性,這個屬性指向生成這個數(shù)組的方法。 如果你沒有注意過這個問題,那么這個標題應該會讓你感到困惑,判斷數(shù)據(jù)類型這么基礎(chǔ)的問題能有什么坑呢? 少年,你不能太天真了,我們朝夕面對的這門語言,可是JavaSc...
摘要:對于復雜類型它的每個實例都有屬性。當檢測實例時優(yōu)于因為能檢測這段代碼是從的。補充以下結(jié)果,發(fā)現(xiàn)第三種方法也能正確判斷出。我們知道結(jié)果是那如何判斷兩個變量呢比較兩個變量,使用的即可。 Javascript中數(shù)據(jù)類型分為兩種: 簡單數(shù)據(jù)類型:Undefined, NULL, Boolean, Number, String 復雜數(shù)據(jù)類型:Object 接下來我們就來看看怎么做數(shù)據(jù)類型判別...
摘要:基本數(shù)據(jù)類型在中,基本數(shù)據(jù)類型有種,即數(shù)值字符串布爾值。兩個布爾值轉(zhuǎn)為數(shù)值進行比較。對于對象和布爾值,調(diào)用它們的方法得到對應的字符串值,然后進行字符串相加。減法對于字符串布爾值或者,自動調(diào)用,轉(zhuǎn)換結(jié)果若為,那么最終結(jié)果為。 這篇文章,來聊聊 JS 中的數(shù)據(jù)類型與變量。這是在學習 JS 時最基礎(chǔ)的一類問題,但卻很重要。希望我的分享有幫助到你。 文章開頭,我先提幾個面試中遇到的問題: 比如...
閱讀 2434·2021-10-11 10:57
閱讀 1284·2021-10-09 09:59
閱讀 1999·2019-08-30 15:53
閱讀 3215·2019-08-30 15:53
閱讀 1013·2019-08-30 15:45
閱讀 742·2019-08-30 15:44
閱讀 3448·2019-08-30 14:24
閱讀 955·2019-08-30 14:21