久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解JavaScript數(shù)據(jù)類(lèi)型和判斷方法

瀏覽:80日期:2023-10-15 11:54:16

前言

JavaScript 中目前有 7 種基本(原始primitives)數(shù)據(jù)類(lèi)型 Undefined, Null,Boolean, Number, String,BigInt,Symbol,以及一種引用類(lèi)型 Object,Object 中又包括 Function,Date,JSON,RegExp等,除了 7 種原始類(lèi)型,其他的所有能夠用 new 實(shí)例化的內(nèi)置類(lèi)型都是 Object 構(gòu)造的。

數(shù)據(jù)類(lèi)型

對(duì)于數(shù)據(jù)了類(lèi)型我們可以通過(guò) typeof 運(yùn)算符來(lái)判斷,具體結(jié)果看下圖。

詳解JavaScript數(shù)據(jù)類(lèi)型和判斷方法

原始類(lèi)型中兩個(gè)比較特殊的就是 Undefined 和 Null,他們兩個(gè)類(lèi)型都只有一個(gè)值就是 undefined 和 null。

Undefined

undefined 一般表示我們未對(duì)變量進(jìn)行初始化。使用 typeof 操作符的時(shí)候,如果是未聲明變量,同樣也會(huì)返回 undefined,再比如未設(shè)置返回值的函數(shù)執(zhí)行的結(jié)果是 undefined,未設(shè)置的參數(shù)也會(huì)被默認(rèn)為 undefined。最后還有一點(diǎn)需要注意的是,undefined 并不是 js 的保留字,并且是全局對(duì)象的一個(gè)屬性,在瀏覽器環(huán)境中就是 window.undefined。當(dāng)在局部環(huán)境中,我們是可以自己給 undefined 屬性賦值的,也就是重寫(xiě) undefined,所以為了確保我們使用的 undefined 是未被重寫(xiě)的,我們可以使用 void 0 來(lái)代替。

Null

null 可以簡(jiǎn)單理解為一個(gè)未被創(chuàng)建的對(duì)象,比如我們使用 document.getElementById 并沒(méi)有找到對(duì)應(yīng)元素的時(shí)候就會(huì)返回 null。null 和 undefined 有一些區(qū)別,在轉(zhuǎn)換為 Number 的時(shí)候,null 會(huì)轉(zhuǎn)換為 0 而 undefined 會(huì)轉(zhuǎn)換為 NaN,執(zhí)行 typeof 運(yùn)算的時(shí)候,undefined返回 undefined 而 null 返回 object。使用 == 判斷兩者相等會(huì)返回 true,所以為了防止誤判一般我們使用全等 ===。null 是所有對(duì)象原型鏈的終點(diǎn),Object.prototype.__proto__ === null。

關(guān)于 null 的使用,當(dāng)我們聲明一個(gè)變量是用來(lái)存儲(chǔ)對(duì)象我們可以先賦值為 null,當(dāng)一個(gè)對(duì)象不再需要的時(shí)候,我們可以設(shè)置為 null 解除這個(gè)引用。

Symbol 和 BigInt

這兩個(gè)都是 ES6 新增的原始數(shù)據(jù)類(lèi)型,Symbol 類(lèi)型的數(shù)據(jù)通過(guò) Symbol() 方法的執(zhí)行產(chǎn)生,不過(guò)需要注意的是 Symbol 不能作為構(gòu)造函數(shù),每個(gè)從 Symbol() 返回的 symbol 值都是唯一的。一個(gè) symbol 值能作為對(duì)象屬性的標(biāo)識(shí)符;這是該數(shù)據(jù)類(lèi)型僅有的目的。

而 BigInt 則是為了精確表示超出雙精度浮點(diǎn)數(shù)的最大安全表示范圍的大數(shù)而新增的基本數(shù)據(jù)類(lèi)型。

判斷數(shù)據(jù)類(lèi)型的方法

typeof 運(yùn)算符

最簡(jiǎn)單的判斷數(shù)據(jù)類(lèi)型的方法是 typeof 運(yùn)算符,返回值為字符串。typeof 的缺點(diǎn)是除了 Function 以外的其他所有對(duì)象的返回值都是 object (null 的返回值也是 object),如果我們需要區(qū)分不同的對(duì)象,就無(wú)法使用 typeof。

instanceof 運(yùn)算符

instanceof 運(yùn)算符是檢測(cè)構(gòu)造函數(shù)的原型是否出現(xiàn)在某個(gè)對(duì)象的原型鏈上。通過(guò) instanceof 運(yùn)算符我們可以實(shí)現(xiàn)對(duì) Object 類(lèi)型的細(xì)分,確定屬于哪種對(duì)象。但是 instanceof 的缺點(diǎn)是只能對(duì)對(duì)象進(jìn)行檢測(cè),對(duì)于基本數(shù)據(jù)類(lèi)型的實(shí)例無(wú)法檢測(cè)(字面量無(wú)法檢測(cè),但是通過(guò)基本包裝類(lèi)型的構(gòu)造函數(shù)創(chuàng)建的基本類(lèi)型可以進(jìn)行檢測(cè))。

constructor 屬性

利用實(shí)例的 constructor 屬性來(lái)輔助判斷實(shí)例的數(shù)據(jù)類(lèi)型也是一種手段。一般來(lái)說(shuō),實(shí)例本身是沒(méi)有 constructor 屬性的,我們所看到的屬性都是 實(shí)例.__proto__.constructor,換言之也就是實(shí)例的構(gòu)造函數(shù),這種方式對(duì)基本數(shù)據(jù)類(lèi)型也是有效的。這種方法的一個(gè)比較大的問(wèn)題是 constructor 屬性是個(gè)不受保護(hù)的屬性,隨時(shí)可能被更改,我們既可以給實(shí)例增加 constructor 屬性,也可以修改構(gòu)造函數(shù)的 prototype 的引用,也可以直接修改原型的 constructor 屬性。

Object.prototype.toString.call()

這是最安全準(zhǔn)確的檢測(cè)數(shù)據(jù)類(lèi)型的方法,每一種數(shù)據(jù)類(lèi)型的構(gòu)造函數(shù)的原型上都有 toString 方法,但是除了 Object.prototype上的 toString 是用來(lái)返回當(dāng)前實(shí)例所屬類(lèi)的信息(檢測(cè)數(shù)據(jù)類(lèi)型的),其余的都是轉(zhuǎn)換為字符串的。該方法可以準(zhǔn)確檢測(cè)所有內(nèi)置類(lèi)型。自定義類(lèi)型的返回值為 Object Object

let toString = Object.prototype.toString //=>Object.prototype.toStringconsole.log(toString.call(10)); //=>'[object Number]'console.log(toString.call(NaN)); //=>'[object Number]'console.log(toString.call('xxx')); //=>'[object String]'console.log(toString.call(true)); //=>'[object Boolean]'console.log(toString.call(null)); //=>'[object Null]'console.log(toString.call(undefined)); //=>'[object Undefined]'console.log(toString.call(Symbol())); //=>'[object Symbol]'console.log(toString.call(BigInt(10))); //=>'[object BigInt]'console.log(toString.call({xxx:’xxx’})); //=>'[object Object]'console.log(toString.call([10,20])); //=>'[object Array]'console.log(toString.call(/^d+$/)); //=>'[object RegExp]'console.log(toString.call(function(){})); //=>'[object Function]'

以上就是詳解JavaScript數(shù)據(jù)類(lèi)型和判斷方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript數(shù)據(jù)類(lèi)型和判斷方法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美精品综合 | 久久精品一区 | 久久国产精品99久久久久久牛牛 | 91人人看| xnxx 日本19| 四虎影院观看 | 日本三级在线视频 | 国产精品极品美女在线观看免费 | 国产欧美视频在线 | 国产精品久久久久久亚洲调教 | 天天爽天天草 | 久久九九国产精品 | 国产精品日产欧美久久久久 | 99re视频精品 | 国产精品成人一区二区三区 | 午夜精品久久久久久久 | www久久久久 | 99热福利 | 久久不卡| 国产成人91 | 国产一区二区三区在线 | 免费在线观看一级毛片 | 精品永久 | 国产一区中文字幕 | www国产高清 | 91精品国产欧美一区二区成人 | 国产精品xxxx | 久久综合久久受 | 成人免费视频网站在线看 | 午夜影院操| 久久青青 | 毛片视频免费 | 一区二区三区在线观看视频 | 成a人片在线观看 | 精品一区二区不卡 | 国产三区在线成人av | 久久久久亚洲精品 | 午夜草民福利电影 | 日本a在线| 毛片网站免费在线观看 | 日韩精品1区 |