国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

javascript中關于類型判斷的一些疑惑小結

2024-05-06 16:46:26
字體:
來源:轉載
供稿:網友

前言

類型判斷是我們在日常工作中經常會遇到的一個功能,本文將給大家詳細介紹關于javascript類型判斷的相關內容,下面話不多說了,來一起看看詳細的介紹吧

Javascript中數據類型分為兩種:

  • 簡單數據類型:Undefined, NULL, Boolean, Number, String
  • 復雜數據類型:Object

接下來我們就來看看怎么做數據類型判別吧?

首先來看看 typeof

 

Type Result
Undefined "undefined"
Null "object" (see below)
Boolean "boolean"
Number "number"
String "string"
Symbol (new in ECMAScript 2015) "symbol"
Host object (provided by the JS environment) Implementation-dependent
Function object (implements [[Call]] in ECMA-262 terms) "function"
Any other object "object"

 

來點code demo吧

let a = undefined;typeof a"undefined"let b = false;typeof b"boolean"let c = 12;typeof c"number"let d = '12';typeof d"string"let f = function () {};typeof f"function"

接下來我們就來看看那些奇怪的現象吧

let str = new String('abc');typeof str"object"let num = new Number(12);typeof num"object"var func = new Function();typeof func; "function"typeof null"object"

使用構造函數創建的變量,使用typeof判斷會返回“object”結果,但是Function函數例外,由它創建的變量typeof返回的是“function”

接著就來說說typeof null == "object"。這個相信前端開發的小伙伴都知道是這個結果了,But why? 這其實是javascript第一個版本就存在的一個bug,歷史原因可以看看這篇文章The history of typeof null

關于如何判斷數組

let arr = [1, 2, 3];typeof arr"object"

上面這個結果大家應該不陌生,那該如何正確判斷數組類型呢

1、instanceof

arr instanceof Array //true

2、isArray

Array.isArray(arr) // true

3、constructor.name

arr.constructor.name // "Array"

第三種用法用的人應該比較少,不少前端的的小伙伴都沒用過。對于復雜類型Object,它的每個實例都有constructor屬性。

instanceof vs isArray

當檢測Array實例時, Array.isArray 優于 instanceof,因為Array.isArray能檢測iframes.

var iframe = document.createElement('iframe');document.body.appendChild(iframe);xArray = window.frames[window.frames.length-1].Array;var arr = new xArray(1,2,3); // [1,2,3]// Correctly checking for ArrayArray.isArray(arr); // true// Considered harmful, because doesn't work though iframesarr instanceof Array; // false

這段代碼是從MDN copy的。補充以下結果,發現第三種方法constructor.name也能正確判斷出。

arr.constructor.name //"Array"

關于NaN

使用isNaN判斷NaN。

isNaN(1/'a') // true

我們知道NaN == NaN結果是false,那如何判斷兩個NaN變量呢?

比較兩個NaN變量,使用es6的Object.is()即可。

let nan1 = NaNlet nan2 = NaNObject.is(nan1, nan2)true

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 时尚| 台安县| 临安市| 贡觉县| 昆山市| 滦平县| 桃园市| 教育| 宜兴市| 同仁县| 满洲里市| 梅州市| 楚雄市| 凉山| 沙河市| 林西县| 突泉县| 兴安县| 谷城县| 岑溪市| 高阳县| 丹东市| 顺昌县| 滦平县| 南平市| 灵石县| 会东县| 西贡区| 博兴县| 汝州市| 新丰县| 岱山县| 五指山市| 五峰| 肃宁县| 会宁县| 炉霍县| 多伦县| 潞城市| 丽水市| 福州市|