最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中確定值的類型的三種方法

 更新時(shí)間:2025年08月04日 08:54:55   作者:超級(jí)無敵大蟑王  
JavaScript是一種弱類型語(yǔ)言,當(dāng)你給一個(gè)變量賦了一個(gè)值,該值是什么類型的,那么該變量就是什么類型的,那么當(dāng)我們?cè)谑褂靡恍┓椒ǖ臅r(shí)候,必須知道該變量是什么類型的,才能調(diào)用該變量對(duì)應(yīng)的一些方法,本文介紹了JavaScript中確定值的類型的三種方法,需要的朋友可以參考下

JavaScript是一種弱類型語(yǔ)言,當(dāng)你給一個(gè)變量賦了一個(gè)值,該值是什么類型的,那么該變量就是什么類型的,并且你還可以給一個(gè)變量賦多種類型的值,也不會(huì)報(bào)錯(cuò),這就是JavaScript的內(nèi)部機(jī)制所決定的,那么當(dāng)我們?cè)谑褂靡恍┓椒ǖ臅r(shí)候,必須知道該變量是什么類型的,才能調(diào)用該變量對(duì)應(yīng)的一些方法,那么我們?nèi)绾潍@取到值的變量呢?

這里我們有三種方法

1.typeof  2.instanceof 3.Object.prototype.toString  下面我將詳細(xì)講解一下這三個(gè)方法

typeof:

作用:判斷一個(gè)變量類型

底層原理:js中為了提高性能效率,使用值編碼來存儲(chǔ)值的類型,讀取值編碼當(dāng)中的類型標(biāo)簽位,根據(jù)標(biāo)簽值返回對(duì)應(yīng)的類型字符串

類型判斷流程:先區(qū)分「直接量」與「指針」

直接量表:

數(shù)據(jù)類型存儲(chǔ)形式第 0 位類型判定關(guān)鍵
Boolean小整數(shù)(SMI)0值為 0 或 2,且最低位為 0(SMI 標(biāo)記)。
Number(SMI)32 位有符號(hào)整數(shù)(SMI)0值非 0/2,且最低位為 0(SMI 標(biāo)記)。
Undefined全局特殊值(單例)直接比較值是否為 undefined 全局變量,typeof 直接返回 "undefined"。

指針表: 

數(shù)據(jù)類型存儲(chǔ)形式低 3 位標(biāo)簽類型判定關(guān)鍵
普通 Object指針000低 3 位為 000
HeapNumber(浮點(diǎn)數(shù))指針001低 3 位為 001
String指針110低 3 位為 110
Symbol指針100低 3 位為 100
BigInt指針101低 3 位為 101
Function(函數(shù))指針011低 3 位為 011
null空指針000

這里null比較特殊,他的低三位和對(duì)象object一樣,所以會(huì)被typeof誤判為object對(duì)象

這里舉一些比較常見的事例: 

console.log(typeof undefined);    // 輸出:"undefined"
console.log(typeof null);         // 輸出:"object"
console.log(typeof true);         // 輸出:"boolean"
console.log(typeof 42);           // 輸出:"number"
console.log(typeof "hello");      // 輸出:"string"
console.log(typeof Symbol("key"));// 輸出:"symbol"
console.log(typeof 100n);         // 輸出:"bigint"
console.log(typeof (() => {}));   // 輸出:"function"
console.log(typeof {});           // 輸出:"object"
 
//特殊情況
console.log(typeof /test/g); // "object"
console.log(typeof Infinity); // "number"
console.log(typeof NaN); // "number"
console.log(typeof undeclaredVar); // "undefined"(不會(huì)報(bào)錯(cuò))

instanceof:

概念:instanceof 是一種操作符,用于判斷一個(gè)對(duì)象是否是某個(gè)類(Class)或接口(Interface)的實(shí)例。這里需要注意的是,instanceof只能判斷對(duì)象,不能判斷基本類型

原理: instanceof 操作符用于檢測(cè)構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上  左邊實(shí)例對(duì)象的內(nèi)部屬性通過 Object.getPrototypeOf() 方法來訪問

//這里表示instanceof不能直接用于基本類型
console.log(42 instanceof Number); // false
 
//可以將基本類型通過內(nèi)置構(gòu)造函數(shù)包裝成對(duì)象
const numObj = new Number(42);
console.log(numObj instanceof Number); // true
 
console.log([] instanceof Array); // true
console.log([] instanceof Object); // true
console.log({} instanceof Object); // true

Object.prototype.toString:

概念:

這個(gè)方法可以判斷一個(gè)變量的具體類型,是最精確的檢測(cè)方式,返回的是一個(gè)【object type】格式字符串,它可以識(shí)別到所有內(nèi)置對(duì)象的類型

使用方法:

// 基本類型和內(nèi)置對(duì)象
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call(new MyClass()); // [object Object] (默認(rèn))

和typeof對(duì)比:

類型typeof 結(jié)果Object.prototype.toString.call() 結(jié)果
[]"object"[object Array]
new Date()"object"[object Date]
/abc/"object"[object RegExp]
null"object"[object Null]
undefined"undefined"[object Undefined]
Symbol(1)"symbol"[object Symbol]

以上就是JavaScript中確定值的類型的三種方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript確定值的類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

顺义区| 裕民县| 茶陵县| 海盐县| 高陵县| 北票市| 德令哈市| 蕲春县| 廉江市| 西吉县| 谢通门县| 兴义市| 元阳县| 阳西县| 长治市| 兴文县| 镇沅| 彰化县| 赤水市| 泰和县| 沽源县| 曲靖市| 塔河县| 黄石市| 勐海县| 夏河县| 通化县| 浙江省| 田东县| 高清| 吉林市| 壤塘县| 双牌县| 正安县| 三台县| 射洪县| 金堂县| 垫江县| 阿拉尔市| 通河县| 台湾省|