成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 JS 中檢查變量是否為數組的多種方式,并說說 ES6 引入檢查數組的緣起!

開發 前端
下面的代碼片段用于檢查變量或值是否為數組。在主流的瀏覽器可以使用Array.isArray方法。對于較舊的瀏覽器,可以使用polyfill。

 [[338276]]

下面的代碼片段用于檢查變量或值是否為數組。在主流的瀏覽器可以使用Array.isArray方法。對于較舊的瀏覽器,可以使用polyfill

  1. const variable = ['🍝''🍜''🍲']; 
  2.  
  3. // 主流瀏覽器 
  4. Array.isArray(variable); 
  5.  
  6. // 老式瀏覽器 
  7. Object.prototype.toString.call(variable) === '[object Array]'

檢查數組的現代方法

檢查數組的最佳方法是使用內置的Array.isArray()

  1. Array.isArray([]); // true 
  2. Array.isArray(['🍝']); // true 
  3. Array.isArray(new Array('🍝')); // true 

瀏覽器支持

瀏覽器對 Array.isArray()的支持非常好 

適用于舊版瀏覽器的 Polyfill

如果需要讓較早的瀏覽器支持,則可以使用此MDN polyfill。

  1. if (!Array.isArray) { 
  2.   Array.isArray = function(org) { 
  3.     return Object.prototype.toString.call(org) === '[object Array]' 
  4.   } 

其它方式:使用 Lodash 或 Underscore

如果你使用的是外部庫,它們也有一些內置方法??

Lodash

檢查值是否為數組對象。

  1. const array = ['🍝''🍜''🍲']; 
  2. const notArray = 'not array'
  3.  
  4. _.isArray(array); // true 
  5. _.isArray(notArray); // false 

Underscore

如果對象是數組,返回 true。

  1. const array = ['🍝''🍜''🍲']; 
  2. const notArray = 'not array'
  3.  
  4. _.isArray(array); // true 
  5. _.isArray(notArray); // false 

為什么我們不能使用typeof?

通常,我們要檢查值的類型,我們只需使用 typeof

  1. typeof 'string'; // 'string' 
  2. typeof 100; // 'number' 
  3. typeof true; // 'boolean' 
  4. typeof false; // 'boolean' 
  5. typeof function() {}; // 'function' 
  6. typeof {}; // 'object' 
  7.  
  8. typeof []; // 'object' <-- 😱 

問題是數組實際上處于 Object 數據類型的保護傘之下。所以typeof 返回值是沒問題。不幸的是,這對我們并沒有什么幫助,因為我們只想檢查值是不是數組。

typeof

Type 例子 返回值
String typeof "hello" "string"
Boolean typeof true
 typeof false
"boolean"
Number typeof 100 "number"
Undefined typeof undefined "undefined"
Function typeof function() {} "function"
Null typeof null "object"
非基本類型 typeof {}
typeof []
"object"

基本類型

在 JS 中有 6 種基本數據類型

  1. string
  2. number
  3. bigint
  4. boolean
  5. undefined
  6. symbol

非基本類型 (對象)

對象是指包含數據和使用數據的指令的數據結構。它們是通過引用存儲的

我比較喜歡稱它為“非基本類型 ”,但它們被稱為Object。

  1. object
  2. array
  3. function

盡管當我們在函數上使用typeof來檢查函數的類型,它返回“ function”,但實際上它是一個對象。

》 MDN:盡管每個 Function 構造函數都是從 Object 構造函數派生的,但它是Function的特殊簡寫形式。

代碼診斷

我收到了很多開發都提供用來檢查Array的不同解決方案。乍一看,它們似乎是不錯的解決方案。有點遺憾的是,有些問題或極端情況使它們不理想。

Array.length 的問題

  1. const array = ['🍝''🍜''🍲']; 
  2.  
  3. array.length; // 3 

如果數組有長度,我們可以假設它是數組?

遺憾的是,此解決方案的問題在于還有其他具有長度即即的數據類型,如:字符串。因此,這可能導致誤報。

  1. const string = 'not array'
  2.  
  3. string.length; // 9 

即使一個對象也可以有length屬性:

  1. const object = { length: 2 }; 
  2. const array = ['🍝''🍜''🍲']; 
  3.  
  4. typeof array === 'object' && Boolean(array.length); // true 
  5. typeof object === 'object' && Boolean(object.length); // true <-- 😱 

instanceof 的問題

  1. const array = ['🍝''🍜''🍲']; 
  2.  
  3. array instanceof Array; // true 

這種方法在 ES5 很常見, 在許多情況下,這種可以很好的工作。但是,這有一個陷阱!它不適用于多個上下文(例如 框架 或windows)。因為每個框架在其自己的執行環境中都有不同的作用域。因此,它具有不同的全局對象和不同的構造函數。因此,如果嘗試針對該框架的上下文測試數組,則該數組不會返回true,而會錯誤地返回false。

window.frames: frames[] 是窗口中所有命名的框架組成的數組。這個數組的每個元素都是一個Window對象,對應于窗口中的一個框架。

  1. const frameNode = document.createElement('iframe'); // 創建一個iframe元素節點 
  2. document.body.appendChild(frameNode); 
  3. // 從我們當前的窗口訪問框架 
  4. const frameBrowser = window.frames[window.frames.length - 1]; 
  5. // 訪問我們創建的框架的“數組”對象 
  6. frameArray = frameBrowser.Array;  
  7.  
  8. // 在我們的框架環境中創建一個新的數組 
  9. const newFrameArray = new frameArray('🍝''🍜''🍲'); 
  10.  
  11. newFrameArray instanceof Array; // ❌ false 
  12.  
  13. Array.isArray(newFrameArray); // ✅ true 

構造函數的問題

  1. const array = ['🍝''🍜''🍲']; 
  2.  
  3. array.constructor === Array; // true 

這是另一個很好的解決方案。不幸的是,這和instanceof有同樣的問題。它也不能在多個上下文中工作。

  1. // ... 
  2.  
  3. newFrameArray.constructor === Array; // ❌ false 
  4.  
  5. Array.isArray(newFrameArray); // ✅ true 

作者:Samantha Ming 譯者:前端小智 來源:medium

原文:https://www.samanthaming.com/tidbits/89-how-to-check-if-variable-is-array/

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2021-01-28 07:52:39

JS數組變量

2020-09-26 22:12:57

JavaScript變量數字

2022-06-01 09:06:58

ES6數組函數

2009-11-24 17:52:46

PHP函數in_arr

2024-01-08 16:27:59

ES6函數

2020-06-22 08:35:22

工具漏洞開發

2020-08-19 08:29:22

JavaScript 對象函數

2022-05-24 08:31:05

C語言檢查數組

2023-11-04 16:26:18

C語言數組

2009-11-25 11:42:34

PHP判斷數組為空

2021-08-02 05:51:29

foreachES6數組

2010-09-10 09:47:14

SQL變量指示

2021-04-20 09:48:48

ES5Es6數組方法

2022-06-01 08:12:32

JS類數組對象

2022-10-25 08:02:01

JavaScriptArrayMap

2019-12-02 18:45:38

JavaScript開發數組

2020-06-24 08:27:36

ES數組對象

2021-04-01 17:04:34

Javascript語法數組

2021-02-05 23:08:10

JS代碼循環

2017-02-08 11:30:51

PHP判斷數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级黄a | 五月婷婷中文 | 国产一级在线 | 一区二区免费看 | 中文字幕伊人 | 国产一区欧美 | 中文字幕精 | 中文字幕三区 | 色妹子综合网 | 国产一级片免费在线观看 | 国产精品成人品 | 国产精品a久久久久 | 色就是色欧美 | 欧美激情精品久久久久久 | 99综合 | 久久精品国产久精国产 | 欧美亚洲一级 | 91精品国产乱码久久久久久久久 | 精品99在线 | 成人不卡 | 男女在线免费观看 | 99久久国产综合精品麻豆 | 一区日韩| 亚洲日本欧美日韩高观看 | 日韩精品一区二区三区中文在线 | 午夜手机在线 | 欧美a在线 | 看a网站 | 视频一区在线 | 亚洲国产在 | 美女久久| 欧美精品在线免费观看 | 狠狠色香婷婷久久亚洲精品 | 日韩精品一区二区三区四区视频 | 日韩成人免费视频 | 欧美日韩一区二区视频在线观看 | 亚洲一区二区中文字幕 | 岛国精品 | 成人av在线播放 | 男人av网| av片免费 |