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

JavaScript數(shù)據(jù)類型檢測的四種常用方式詳解

 更新時間:2025年07月10日 08:49:27   作者:LuckySusu  
在 JavaScript 開發(fā)中,判斷數(shù)據(jù)類型是一項基礎但非常重要的技能,由于 JavaScript 是一門動態(tài)類型語言,變量可以在運行時被賦予不同的值類型,因此我們需要掌握多種方法來準確檢測變量的數(shù)據(jù)類型,本文給大家講解了四種常見的類型檢測方式,需要的朋友可以參考下

本文將系統(tǒng)講解以下 4 種常見的類型檢測方式:

  • typeof
  • instanceof
  • constructor
  • Object.prototype.toString.call()

并分析它們的使用場景、優(yōu)缺點及注意事項。

一、typeof 運算符

作用:

用于檢測變量的基本數(shù)據(jù)類型(原始類型)。

示例代碼:

console.log(typeof 2);               // "number"
console.log(typeof true);            // "boolean"
console.log(typeof 'str');           // "string"
console.log(typeof []);              // "object"
console.log(typeof function(){});    // "function"
console.log(typeof {});              // "object"
console.log(typeof undefined);       // "undefined"
console.log(typeof null);            // "object"

特點與限制:

類型檢測結果
基本類型(Number、String、Boolean、Undefined)正確
Null? 錯誤返回 "object"(歷史遺留問題)
對象(Object、Array)都返回 "object"
函數(shù)返回 "function"

優(yōu)點:

  • 簡單高效;
  • 能正確識別基本類型;

缺點:

  • 無法區(qū)分對象和數(shù)組;
  • null 被錯誤地識別為 "object";
  • 不能檢測 Symbol、BigInt 等復雜類型;

二、instanceof 運算符

作用:

用于檢測某個對象是否是某個構造函數(shù)的實例(即其原型鏈中是否存在該構造函數(shù)的原型)。

示例代碼:

console.log(2 instanceof Number);         // false
console.log(true instanceof Boolean);     // false
console.log('str' instanceof String);     // false

console.log([] instanceof Array);         // true
console.log(function() {} instanceof Function); // true
console.log({} instanceof Object);        // true

特點與限制:

類型檢測結果
原始類型? 不支持(如數(shù)字、布爾值等)
引用類型(對象、數(shù)組、函數(shù))? 可以正確判斷

優(yōu)點:

  • 能判斷引用類型的繼承關系;
  • 適用于復雜對象的類型判斷;

缺點:

  • 不能判斷基本類型;
  • 在跨框架或跨窗口環(huán)境中可能失效(如 iframe 中的對象);

三、constructor 屬性

作用:

每個對象都有一個 constructor 屬性,指向創(chuàng)建它的構造函數(shù)。

示例代碼:

console.log((2).constructor === Number);          // true
console.log((true).constructor === Boolean);      // true
console.log(('str').constructor === String);      // true
console.log(([]).constructor === Array);          // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object);         // true

注意事項:

function Fn(){}
Fn.prototype = new Array();
var f = new Fn();

console.log(f.constructor === Fn);   // false
console.log(f.constructor === Array); // true

優(yōu)點:

  • 可以檢測基本類型;
  • 能獲取構造函數(shù)信息;

缺點:

  • 如果修改了原型鏈,會導致判斷不準確;
  • 不適合在嚴格模式下使用(某些環(huán)境會拋出錯誤);
  • 安全性較低,容易被覆蓋或篡改;

四、Object.prototype.toString.call() 方法

作用:

這是目前最通用且可靠的數(shù)據(jù)類型檢測方式。它返回 [object Type] 格式的字符串,表示對象的具體類型。

示例代碼:

console.log(Object.prototype.toString.call(2));         // "[object Number]"
console.log(Object.prototype.toString.call(true));      // "[object Boolean]"
console.log(Object.prototype.toString.call('str'));     // "[object String]"
console.log(Object.prototype.toString.call([]));        // "[object Array]"
console.log(Object.prototype.toString.call(function(){}));// "[object Function]"
console.log(Object.prototype.toString.call({}));         // "[object Object]"
console.log(Object.prototype.toString.call(undefined));  // "[object Undefined]"
console.log(Object.prototype.toString.call(null));       // "[object Null]"

為什么不用 obj.toString()?

很多內置對象重寫了 toString() 方法,比如:

  • Array.prototype.toString() 返回的是元素拼接成的字符串;
  • Function.prototype.toString() 返回函數(shù)體的字符串表示;
  • 所以調用 obj.toString() 得到的并不是對象的類型信息。

Object.prototype.toString.call(obj) 繞過了這些重寫,直接調用了原生的方法,返回標準格式的類型標識。

優(yōu)點:

  • 可以準確判斷所有內置類型(包括 null、undefined);
  • 不受原型鏈修改影響;
  • 兼容性好,適用于大多數(shù)瀏覽器和環(huán)境;

缺點:

  • 寫法稍顯繁瑣;
  • 不能檢測自定義類的類型(除非自己實現(xiàn) Symbol.toStringTag);

五、總結對比表

檢測方式是否可檢測基本類型是否可檢測引用類型是否可判斷 null是否受原型影響推薦指數(shù)
typeof??(對象/數(shù)組統(tǒng)一)????
instanceof????????
constructor??????
Object.prototype.toString.call()????????

六、一句話總結

在 JavaScript 中,typeof 適合檢測基本類型,instanceofconstructor 適合判斷引用類型,而 Object.prototype.toString.call() 是唯一能準確判斷所有數(shù)據(jù)類型的“終極方案”。

進階建議

  • 學習 ES6 的 Symbol.toStringTag,可以自定義對象的 toString() 表現(xiàn);
  • 使用 TypeScript 或 Flow 可以提前避免類型判斷問題;
  • 在 Vue / React 中結合 PropTypes 或 TypeScript 類型系統(tǒng)提升類型安全性;
  • 使用 lodash.isXXX 系列函數(shù)進行類型判斷;

以上就是JavaScript數(shù)據(jù)類型檢測的四種常用方式詳解的詳細內容,更多關于JavaScript數(shù)據(jù)類型檢測的資料請關注腳本之家其它相關文章!

相關文章

  • javascript實現(xiàn)的淘寶旅行通用日歷組件用法實例

    javascript實現(xiàn)的淘寶旅行通用日歷組件用法實例

    這篇文章主要介紹了javascript實現(xiàn)的淘寶旅行通用日歷組件,以實例形式分析了該日歷組件的相關設置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • js跟隨滾動條滾動浮動代碼

    js跟隨滾動條滾動浮動代碼

    js跟隨滾動條滾動浮動代碼,對于firefox不兼容。
    2009-12-12
  • JS獲取年月日時分秒的方法分析

    JS獲取年月日時分秒的方法分析

    這篇文章主要介紹了JS獲取年月日時分秒的方法,結合實例形式分析了JS獲取具體時間的常犯錯誤與相應解決方法,需要的朋友可以參考下
    2016-11-11
  • 微信小程序自定義底部彈出框動畫

    微信小程序自定義底部彈出框動畫

    這篇文章主要為大家詳細介紹了微信小程序自定義底部彈出框動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • uni-app實現(xiàn)web-view圖片長按下載解決方案

    uni-app實現(xiàn)web-view圖片長按下載解決方案

    uniapp的web-view中圖片無法長按保存,IOS下是正常的,但是Android下長按無反應,這篇文章主要介紹了uni-app實現(xiàn)web-view圖片長按下載解決方案,需要的朋友可以參考下
    2023-09-09
  • Javascript中字符串和數(shù)字的操作方法整理

    Javascript中字符串和數(shù)字的操作方法整理

    字符串和數(shù)字的操作在js中非常頻繁,也非常重要。以往看完書之后都能記得非常清楚,但稍微隔一段時間不用,便會忘得差不多,記性不好是硬傷啊。下面這篇文章就對字符串和數(shù)字的一些常用操作做個整理,一者加深印象,二者方便今后溫習查閱。需要的朋友們可以參考借鑒。
    2017-01-01
  • javascript實現(xiàn)tab切換的兩個實例

    javascript實現(xiàn)tab切換的兩個實例

    這篇文章主要介紹了javascript實現(xiàn)tab切換的兩個實例,是對之前方法原理的進一步延伸,需要深入了解的同學可以參考一下
    2015-11-11
  • underscore?防抖技巧學習示例

    underscore?防抖技巧學習示例

    這篇文章主要為大家介紹了underscore?防抖技巧學習示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • javascript實現(xiàn)獲取圖片大小及圖片等比縮放的方法

    javascript實現(xiàn)獲取圖片大小及圖片等比縮放的方法

    這篇文章主要介紹了javascript實現(xiàn)獲取圖片大小及圖片等比縮放的方法,涉及javascript針對圖形圖像相關屬性獲取與修改相關操作技巧,需要的朋友可以參考下
    2016-11-11
  • Solid.js和React框架的多維度比較

    Solid.js和React框架的多維度比較

    2025年有5個框架脫穎而出,成為開發(fā)者們關注的焦點,其中React和SolidJS更是引發(fā)了廣泛討論,這篇文章主要介紹了Solid.js和React框架的多維度比較,需要的朋友可以參考下
    2026-05-05

最新評論

桐柏县| 潼关县| 宣汉县| 海南省| 措勤县| 嘉义市| 肃南| 华蓥市| 玉溪市| 平罗县| 江达县| 紫金县| 永寿县| 永和县| 鄄城县| 肃北| 鄂州市| 广昌县| 大新县| 琼中| 新安县| 陕西省| 麦盖提县| 五峰| 乐清市| 樟树市| 孟津县| 泰顺县| 酒泉市| 北票市| 海盐县| 文昌市| 井陉县| 保定市| 卫辉市| 天津市| 灌阳县| 田林县| 神木县| 铁岭市| 吐鲁番市|