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

JavaScript類型判斷操作方法(新手必看篇)

 更新時間:2026年06月10日 09:50:55   作者:小KK_  
眾所周知在JavaScript開發(fā)中,準確判斷數(shù)據(jù)類型是常見需求,這篇文章主要介紹了JavaScript類型判斷操作方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

在JavaScript開發(fā)中,準確判斷數(shù)據(jù)類型是日常編碼的高頻操作,也是不少初學者容易踩坑的地方。為什么typeof null“object”? instanceof 的原理是什么?有沒有一種“萬能”的類型判斷方法?本文將從原始類型和引用類型出發(fā),循序漸進的帶你搞懂這類型判斷背后的門道。

一. 先溫習JS中的兩大類型陣營

在開始討論之前,我們先快速回顧一下JS中的數(shù)據(jù)類型劃分:

原始類型

string,number,boolaen,null, undefined, bigint, Symbol

它們直接存儲于棧中,賦值給變量時是值的拷貝。

引用類型

Array, function, object, Date

它們存儲在堆內存中,變量保存的只是內存地址的引用。

因為這兩種類型在底層存儲和行為的差異,導致它們各自適合不同的判斷方式。

二. typeof———簡單直接,但有局限

typeof 操作符是我們最常用的類型判斷工具之一。它的特點是:

  • 能準確判斷除null以外的所有原始類型

  • 對于引用類型,typeof 統(tǒng)一返回 "object",只有一個特例:函數(shù)返回 "function" 。

也就是說,數(shù)組、普通對象、日期對象、正則表達式等統(tǒng)統(tǒng)被識別為 "object"。

typeof []         // "object"
typeof {}         // "object"
typeof new Date() // "object"
typeof /reg/      // "object"
typeof function(){}  // "function"

讓人迷惑的 null

typeof null  // "object"

為什么判斷null返回的是object呢?這是因為:typeof 是通過將值轉為二進制,來判斷類型的,二進制前三位是 0 的統(tǒng)一被認為是引用類型,在計算機中,所有的引用類型被轉為二進制,前三位都是 0(除了函數(shù)),而 null 轉為二進制是一整串 0,所以null被錯誤判斷為了object。

三.instanceof——基于原型鏈的歸屬判斷

1. 只能判斷引用類型,無法判斷原始類型

3. 它是通過隱式原型鏈來查找 x 是否隸屬于 X 這個類型

[] instanceof Array        // true
{} instanceof Object       // true
new Date() instanceof Date  // true
function(){} instanceof Function  // true

四. Object.prototype.toString——終極萬能判斷法

如果你想要一個絕對可靠、能區(qū)分所有數(shù)據(jù)類型的方法,那非Object.prototype.toString莫屬。

原理淺析

每個對象內部都有一個 [[Class]] 屬性,它標記了該對象的類型標簽(如 ArrayDate、NumberString 等)。當我們調用 Object.prototype.toString 方法時,它會執(zhí)行以下步驟:

  1. 如果值是 undefined,直接返回 "[object Undefined]"

  2. 如果值是 null,返回 "[object Null]"。

  3. 否則,將值轉換為一個對象(ToObject(this)),然后讀取該對象的 [[Class]] 屬性,最后拼接成 "[object " + [[Class]] + "]" 的形式。

由于 Object.prototype.toString 可以被任意對象調用,我們通常使用 call 或 apply 來改變它的 this 指向,使其能直接處理原始值。

Object.prototype.toString.call(123)     // "[object Number]"
Object.prototype.toString.call("hello") // "[object String]"
Object.prototype.toString.call(true)    // "[object Boolean]"
Object.prototype.toString.call(null)    // "[object Null]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call([])       // "[object Array]"
Object.prototype.toString.call({})       // "[object Object]"
Object.prototype.toString.call(new Date()) // "[object Date]"
Object.prototype.toString.call(/reg/)    // "[object RegExp]"
Object.prototype.toString.call(function(){}) // "[object Function]"

五. Array.isArray——專為數(shù)組而生

檢測數(shù)組是最常見的需求之一,雖然Object.prototype.toString.call(arr) === “[object Array]"萬無一失,但是數(shù)組有一個專門的Array.isArray()方法,更加簡單直接。

Array.isArray([])      // true
Array.isArray({})      // false
Array.isArray(new Array(5))  // true

六.各方法對比總結

方法適用場景不足之處
typeof判斷原始類型(除null外)和函數(shù)typeof null → "object";無法區(qū)分具體的對象類型(數(shù)組、日期等)
instanceof判斷某個對象是否由指定構造函數(shù)創(chuàng)建無法判斷原始類型
Object.prototype.toString全場景通用,精準返回每個數(shù)據(jù)的內置類型寫法稍長,通常需要封裝
Array.isArray專用于判斷數(shù)組只解決數(shù)組場景

到此這篇關于JavaScript類型判斷操作方法的文章就介紹到這了,更多相關JS類型判斷內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js方塊躲避游戲代碼

    js方塊躲避游戲代碼

    鼠標控制,空色方塊不要讓藍色方塊碰到就可以,看能玩多久,是個javascript不錯的一個游戲啊,想用js寫游戲的朋友可以參考下,看代碼應該是國外的人寫的
    2008-05-05
  • js動態(tài)實現(xiàn)表格添加和刪除操作

    js動態(tài)實現(xiàn)表格添加和刪除操作

    這篇文章主要為大家詳細介紹了js動態(tài)實現(xiàn)表格添加和刪除操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • document.documentElement的一些使用技巧

    document.documentElement的一些使用技巧

    documentElement 屬性可返回文檔的根節(jié)點,接下來為大家詳細介紹下document.documentElement的一些使用技巧,感興趣的朋友可以參考下哈
    2013-04-04
  • js展開閉合效果演示代碼

    js展開閉合效果演示代碼

    本文為大家介紹下js如何實現(xiàn)展開閉合效果,具體代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • JS加jquery簡單實現(xiàn)標簽元素的顯示或隱藏

    JS加jquery簡單實現(xiàn)標簽元素的顯示或隱藏

    標簽元素的顯示或隱藏在使用中還是挺頻繁的,下面有個不錯的示例,大家可以參考下,或許有所幫助
    2013-09-09
  • JS獲取父節(jié)點方法

    JS獲取父節(jié)點方法

    在Web應用程序特別是Web2.0程序開發(fā)中,經(jīng)常要獲取頁面中某個元素,然后更新該元素的樣式、內容等。
    2009-08-08
  • JavaScript錯誤處理和堆棧追蹤詳解

    JavaScript錯誤處理和堆棧追蹤詳解

    這篇文章主要為大家詳細介紹了JavaScript錯誤處理和堆棧追蹤的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • JavaScript檢查彈出窗口是否被阻攔的方法技巧

    JavaScript檢查彈出窗口是否被阻攔的方法技巧

    這篇文章主要介紹了JavaScript檢查彈出窗口是否被阻攔的方法技巧,本文用于檢測window.open彈出的窗口是否被阻攔,需要的朋友可以參考下
    2015-03-03
  • js 可選鏈操作符的使用

    js 可選鏈操作符的使用

    可選鏈操作符(?.)允許讀取位于鏈接對象鏈身處的屬性的值,本文就詳細的介紹一下,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 微信小程序scroll-x失效的完美解決方法

    微信小程序scroll-x失效的完美解決方法

    在微信小程序的文檔中,使用scroll-view標簽,然后給它設置一個scroll-x就可以實現(xiàn)元素,橫向排列,可以左右滑動,但是在實際開發(fā)中會遇到各種問題,下面小編給大家?guī)砹宋⑿判〕绦騭croll-x失效的完美解決方法,需要的朋友可以參考下
    2018-07-07

最新評論

理塘县| 兴义市| 六安市| 樟树市| 武汉市| 长子县| 山阳县| 崇礼县| 丹巴县| 临沧市| 石林| 九江县| 荣成市| 隆化县| 彭泽县| 抚州市| 杭锦后旗| 台南市| 莱州市| 杂多县| 怀仁县| 景谷| 秦安县| 姚安县| 阜城县| 北辰区| 黄大仙区| 习水县| 德庆县| 宜良县| 嘉兴市| 博湖县| 石阡县| 白水县| 义乌市| 视频| 长宁县| 扬中市| 遂川县| 思南县| 思茅市|