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

詳解JavaScript類型判斷的四種方法

 更新時間:2020年10月21日 09:31:07   作者:佑耳  
這篇文章主要介紹了JavaScript類型判斷的四種方法,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下

JavaScript有八種內(nèi)置類型,除對象外,其他統(tǒng)稱為“基本類型”。

  • 空值(null)
  • 未定義(undefined)
  • 布爾值(boolean)
  • 數(shù)字(number)
  • 字符串(string)
  • 對象 (object)
  • 符號(symbol, ES6中新增)
  • 大整數(shù)(BigInt, ES2020 引入)

Symbol: 是ES6中引入的一種原始數(shù)據(jù)類型,表示獨一無二的值。

BigInt:是 ES2020 引入的一種新的數(shù)據(jù)類型,用來解決 JavaScript中數(shù)字只能到 53 個二進制位(JavaScript 所有數(shù)字都保存成 64 位浮點數(shù),大于這個范圍的整數(shù),無法精確表示的問題。具體可查看:新數(shù)據(jù)類型 — BigInt

一、typeof

typeof是一個操作符而不是函數(shù),其右側(cè)跟一個一元表達式,并返回這個表達式的數(shù)據(jù)類型。返回的結(jié)果用該類型的字符串(全小寫字母)形式表示,包括以下 8 種:number、boolean、symbol、string、object、undefined、function 、bigInt等。

typeof原理是不同的對象在底層都表示為二進制,在Javascript中二進制前(低)三位存儲其類型信息。

  • 000: 對象
  • 010: 浮點數(shù)
  • 100:字符串
  • 110:布爾
  • 1:整數(shù)
console.log(typeof undefined) // undefind
console.log(typeof null)   // object
console.log(typeof true)   // boolean
console.log(typeof 43)    // number
console.log(typeof '21')   // string
console.log(typeof {a:1})   // object
console.log(typeof Symbol()) // symbol
console.log(typeof 123n)   // bigint
function a() {}
console.log(typeof a)     // function
var date = new Date()
var error = new Error()
console.log(typeof date)   // object
console.log(typeof error)   // object

二、instanceof

instanceof 是用來判斷 A 是否為 B 的實例,表達式為:A instanceof B,如果 A 是 B 的實例,則返回 true,否則返回 false。 在這里需要特別注意的是:instanceof 檢測的是原型

通俗一些講,instanceof 用來比較一個對象是否為某一個構(gòu)造函數(shù)的實例。注意,instanceof可以準(zhǔn)確的判斷復(fù)雜數(shù)據(jù)類型,但是不能正確判斷基本數(shù)據(jù)類型

console.log(12 instanceof Number) // false
console.log('22' instanceof String) // false
console.log(true instanceof Boolean) // false
console.log(null instanceof Object) // false
console.log(undefined instanceof Object) // false
 
console.log([] instanceof Array)  // true
console.log({a: 1} instanceof Object) // true
console.log(json instanceof Object) // true
function a() {}
console.log(a instanceof Function) // true
console.log(new Date() instanceof Date) //true
console.log(reg instanceof RegExp) //true
console.log(error instanceof Error) // true

三、Object.prototype.toString.call()

toString() 是 Object 的原型方法,調(diào)用該方法,默認(rèn)返回當(dāng)前對象的 [[Class]] 。這是一個內(nèi)部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對象的類型。

對于 Object 對象,直接調(diào)用 toString() 就能返回 [object Object] 。而對于其他對象,則需要通過 call / apply 來調(diào)用才能返回正確的類型信息。

console.log(Object.prototype.toString.call(1))     // [object Number]
console.log(Object.prototype.toString.call(1n))     // [object BigInt]
console.log(Object.prototype.toString.call('123'))   // [object String]
console.log(Object.prototype.toString.call(true))    // [object Boolean]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(null))    // [object Null]
console.log(Object.prototype.toString.call({}))     // [object Object]
console.log(Object.prototype.toString.call([]))     // [object Array]
console.log(Object.prototype.toString.call(function a() {})) // [object Function]
console.log(Object.prototype.toString.call(Symbol()))     // [object Symbol]
console.log(Object.prototype.toString.call(Math))       // [object Math]
console.log(Object.prototype.toString.call(JSON))       // [object JSON]
console.log(Object.prototype.toString.call(new Date()))    // [object Date]
console.log(Object.prototype.toString.call(new RegExp()))   // [object RegExp]
console.log(Object.prototype.toString.call(new Error))    // [object Error]
console.log(Object.prototype.toString.call(window)      // [object Window]
console.log(Object.prototype.toString.call(document)     // [object HTMLDocument]

使用該方法我們可以封裝一個isType方法來對類型進行判斷

let isType = (type, obj) => {
  return Object.prototype.toString.call(obj) === `[object ${type}]`
}
console.log(isType('Number', 12))  // true
console.log(isType('Number', '12')) // false

或者

let type = function(o) {
  let s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
console.log(type(12)) // number
console.log(type('12')) // string
console.log(type({})) // object
console.log(type([])) // array

四、constructor

constructor屬性,可以得知某個實例對象,到底是哪一個構(gòu)造函數(shù)產(chǎn)生的。

constructor屬性表示原型對象與構(gòu)造函數(shù)之間的關(guān)聯(lián)關(guān)系,如果修改了原型對象,一般會同時修改constructor屬性,防止引用的時候出錯。所以,修改原型對象時,一般要同時修改constructor屬性的指向。

console.log('22'.constructor === String)       // true
console.log(true.constructor === Boolean)      // true
console.log([].constructor === Array)        // true
console.log(document.constructor === HTMLDocument)  // true
console.log(window.constructor === Window)      // true
console.log(new Number(22).constructor === Number)  // true
console.log(new Function().constructor === Function) // true
console.log((new Date()).constructor === Date)    // true
console.log(new RegExp().constructor === RegExp)   // true
console.log(new Error().constructor === Error)    // true

注意:

1、null 和 undefined 是無效的對象,因此是不會有 constructor 存在的,這兩種類型的數(shù)據(jù)需要通過其他方式來判斷。

2、函數(shù)的 constructor 是不穩(wěn)定的,這個主要體現(xiàn)在自定義對象上,當(dāng)開發(fā)者重寫 prototype 后,原有的 constructor 引用會丟失,constructor 會默認(rèn)為 Object

以上就是JavaScript類型判斷的四種方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript類型判斷的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序按鈕巧妙用法

    微信小程序按鈕巧妙用法

    這篇文章主要介紹了微信小程序按鈕巧妙用法,按鈕組件功能比?HTML?中的?button?按鈕豐富,通過?open-type?屬性可以調(diào)用微信提供的各種功能(客服、轉(zhuǎn)發(fā)、獲取用戶授權(quán)、獲取用戶信息等),需要的朋友可以參考下
    2022-12-12
  • js下拉選擇框與輸入框聯(lián)動實現(xiàn)添加選中值到輸入框的方法

    js下拉選擇框與輸入框聯(lián)動實現(xiàn)添加選中值到輸入框的方法

    這篇文章主要介紹了js下拉選擇框與輸入框聯(lián)動實現(xiàn)添加選中值到輸入框的方法,涉及javascript中onchange事件及頁面元素遍歷的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • JavaScript學(xué)習(xí)筆記之?dāng)?shù)組基本操作示例

    JavaScript學(xué)習(xí)筆記之?dāng)?shù)組基本操作示例

    這篇文章主要介紹了JavaScrip學(xué)習(xí)筆記之?dāng)?shù)組基本操作,結(jié)合實例形式分析了javascript數(shù)組的基本定義、添加、刪除、修改、連接、排序等操作技巧,需要的朋友可以參考下
    2019-01-01
  • 詳解JavaScript如何實現(xiàn)更短時間的延時函數(shù)

    詳解JavaScript如何實現(xiàn)更短時間的延時函數(shù)

    在項目開發(fā)中,經(jīng)常能遇到需要延時執(zhí)行的需求,比如實現(xiàn)一個定時器功能,本文主要和大家介紹了JS如何實現(xiàn)更短時間的延時函數(shù),需要的可以參考下
    2024-03-03
  • 微信小程序列表中item左滑刪除功能

    微信小程序列表中item左滑刪除功能

    這篇文章主要介紹了微信小程序列表中item左滑刪除功能,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • JavaScript 手動實現(xiàn)instanceof的方法

    JavaScript 手動實現(xiàn)instanceof的方法

    instanceof運算符用于檢測構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個實例對象的原型鏈上,本文重點給大家介紹JavaScript手動實現(xiàn)instanceof的問題,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • JS簡單實現(xiàn)移動端日歷功能示例

    JS簡單實現(xiàn)移動端日歷功能示例

    這篇文章主要介紹了JS簡單實現(xiàn)移動端日歷功能的方法,涉及javascript針對日期與時間的操作及顯示相關(guān)技巧,需要的朋友可以參考下
    2016-12-12
  • 一段效率很高的for循環(huán)語句使用方法

    一段效率很高的for循環(huán)語句使用方法

    一段效率很高的for循環(huán)語句使用方法...
    2007-08-08
  • JavaScript利用正則表達式來禁止鍵盤輸入數(shù)字

    JavaScript利用正則表達式來禁止鍵盤輸入數(shù)字

    本文主要介紹了JavaScript利用正則表達式來禁止鍵盤輸入數(shù)字,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • layui復(fù)選框限制選擇個數(shù)的方法

    layui復(fù)選框限制選擇個數(shù)的方法

    今天小編就為大家分享一篇layui復(fù)選框限制選擇個數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評論

壤塘县| 莱阳市| 西华县| 嘉义市| 乐陵市| 瑞金市| 利辛县| 保靖县| 湄潭县| 榆林市| 丰宁| 苗栗县| 辽宁省| 望都县| 周宁县| 临沂市| 康马县| 鹤壁市| 夹江县| 六枝特区| 舟曲县| 惠来县| 松桃| 安陆市| 东光县| 盐池县| 盖州市| 平利县| 工布江达县| 澄迈县| 文安县| 增城市| 阳信县| 遵义县| 隆子县| 新源县| 东丰县| 天气| 即墨市| 贡觉县| 屯门区|