成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何判斷JavaScript的數(shù)據(jù)類型?

jackzou / 991人閱讀

摘要:本文將講解我目前所知道的判斷數(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,DateRegExp等。

typeof

typeof可以用來區(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"。注意NumberString作為普通函數(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.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"

由上面的示例可知,該方法沒有辦法區(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.isArray

Array.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

相關(guān)文章

  • JavaScript專題系列文章

    摘要:專題系列共計篇,主要研究日常開發(fā)中一些功能點的實現(xiàn),比如防抖節(jié)流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點是研究專題之函數(shù)組合專題系列第十六篇,講解函數(shù)組合,并且使用柯里化和函數(shù)組合實現(xiàn)模式需求我們需要寫一個函數(shù),輸入,返回。 JavaScript 專題之從零實現(xiàn) jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實現(xiàn)一個 jQuery 的 ext...

    Maxiye 評論0 收藏0
  • javascript如何判斷變量數(shù)據(jù)類型

    摘要:除和外,所有的數(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...

    曹金海 評論0 收藏0
  • JavaScript中,如何判斷數(shù)組是數(shù)組?

    摘要:比如我們今天要討論的,在當中如何判斷一個數(shù)組是數(shù)組。在數(shù)組的原型鏈上也能找到構(gòu)造函數(shù)由上面的幾行代碼可以看出,使用運算符可以分辨數(shù)組和對象,可以判斷數(shù)組是數(shù)組。用判斷實例化的數(shù)組擁有一個屬性,這個屬性指向生成這個數(shù)組的方法。 如果你沒有注意過這個問題,那么這個標題應該會讓你感到困惑,判斷數(shù)據(jù)類型這么基礎(chǔ)的問題能有什么坑呢? 少年,你不能太天真了,我們朝夕面對的這門語言,可是JavaSc...

    kohoh_ 評論0 收藏0
  • 關(guān)于javascript類型判斷那些疑惑

    摘要:對于復雜類型它的每個實例都有屬性。當檢測實例時優(yōu)于因為能檢測這段代碼是從的。補充以下結(jié)果,發(fā)現(xiàn)第三種方法也能正確判斷出。我們知道結(jié)果是那如何判斷兩個變量呢比較兩個變量,使用的即可。 Javascript中數(shù)據(jù)類型分為兩種: 簡單數(shù)據(jù)類型:Undefined, NULL, Boolean, Number, String 復雜數(shù)據(jù)類型:Object 接下來我們就來看看怎么做數(shù)據(jù)類型判別...

    李增田 評論0 收藏0
  • 分析 JavaScript 數(shù)據(jù)類型與變量

    摘要:基本數(shù)據(jù)類型在中,基本數(shù)據(jù)類型有種,即數(shù)值字符串布爾值。兩個布爾值轉(zhuǎn)為數(shù)值進行比較。對于對象和布爾值,調(diào)用它們的方法得到對應的字符串值,然后進行字符串相加。減法對于字符串布爾值或者,自動調(diào)用,轉(zhuǎn)換結(jié)果若為,那么最終結(jié)果為。 這篇文章,來聊聊 JS 中的數(shù)據(jù)類型與變量。這是在學習 JS 時最基礎(chǔ)的一類問題,但卻很重要。希望我的分享有幫助到你。 文章開頭,我先提幾個面試中遇到的問題: 比如...

    Mike617 評論0 收藏0

發(fā)表評論

0條評論

jackzou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<