摘要:定義在權(quán)威指南中是這樣解釋類數(shù)組對象的一種常常完全合理的看法把擁有一個數(shù)值屬性和對應(yīng)非整數(shù)屬性的對象看做一種類型的數(shù)組。常見的類數(shù)組對象有函數(shù)中的對象等。主要原因是因?yàn)轭悢?shù)組對象不是規(guī)范的,所以不同項(xiàng)目的定義會有所不同。
定義
在《JavaScript權(quán)威指南》中是這樣解釋類數(shù)組對象的:
一種常常完全合理的看法把擁有一個數(shù)值length屬性和對應(yīng)非整數(shù)屬性的對象看做一種類型的數(shù)組。
常見的類數(shù)組對象有函數(shù)中的arguments對象、HTMLCollection、NodeList等。
判斷方法 《JavaScript權(quán)威指南》中給出的判斷方法function isArrayLike(o) { if(o && // o不是null、undefined等 typeof o === "object" && // o是對象 isFinite(o.length) && // o.length是有限數(shù)值 o.length >= 0 && // o.length為非負(fù)值 o.length === Math.floor(o.length) && // o.length是整數(shù) o.length < 4294967296) // o.length < 2^32 return true else return false }
在這里我有一個疑問,根據(jù)定義,函數(shù)也有l(wèi)ength數(shù)值屬性,應(yīng)該也是類數(shù)組對象。但如果o是一個函數(shù),那么typeof o返回的是"function",并不是"object",以致于調(diào)用isArrayLike函數(shù)會得到false。(感覺還是因?yàn)槎x不嚴(yán)謹(jǐn)導(dǎo)致的)
underscore中的實(shí)現(xiàn)var isArrayLike = function(collection) { // 返回參數(shù) collection 的 length 屬性值 var length = getLength(collection); // length是數(shù)值,非負(fù),且小于等于MAX_ARRAY_INDEX // MAX_ARRAY_INDEX = Math.pow(2, 53) - 1 return typeof length == "number" && length >= 0 && length <= MAX_ARRAY_INDEX; }
相對來說,underscore中的實(shí)現(xiàn)跟定義一樣寬松,函數(shù)也是類數(shù)組對象。甚至傳入數(shù)組,isArrayLike函數(shù)也會返回true。
jQuery中的實(shí)現(xiàn)function isArrayLike(obj) { // 如果obj非null、undefined等,有l(wèi)ength屬性,則length等于obj.length // 否則,length為false var length = !!obj && "length" in obj && obj.length, // 檢測obj的類型 type = jQuery.type(obj) // 如果obj是function類型 或者是window對象 則返回false if (type === "function" || jQuery.isWindow(obj)) { return false } // obj本身是數(shù)組,則返回true // obj不是數(shù)組,但有l(wèi)ength屬性且為0,例如{length : 0},則返回true // obj不是數(shù)組,但有l(wèi)ength屬性且為整數(shù)數(shù)值,obj[length - 1]存在,則返回true return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj; }結(jié)語
類數(shù)組對象的判斷,不同版本的返回結(jié)果有細(xì)微的差別。主要原因是因?yàn)轭悢?shù)組對象不是規(guī)范的,所以不同項(xiàng)目的定義會有所不同。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91127.html
摘要:返回值這段在下方應(yīng)用中有詳細(xì)的示例解析?;卣{(diào)函數(shù)丟失的解決方案綁定回調(diào)函數(shù)的指向這是典型的應(yīng)用場景綁定指向,用做回調(diào)函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019971331?w=1024&h=680); 函數(shù)原型鏈中的 apply,call 和 bind 方法是 JavaScript 中相當(dāng)重要的概念,與 this...
摘要:但是,我們可以借用類數(shù)組方法不難看出,此時的在調(diào)用數(shù)組原型方法時,返回值已經(jīng)轉(zhuǎn)化成數(shù)組了。很多時候,深入看看源代碼也會讓你對這個理解的更透徹。的前端樂園原文鏈接深入理解類數(shù)組 起因 寫這篇博客的起因,是我在知乎上回答一個問題時,說自己在學(xué)前端時把《JavaScript高級程序設(shè)計(jì)》看了好幾遍。于是在評論區(qū)中,出現(xiàn)了如下的對話:showImg(https://segmentfault.c...
摘要:前一個值,當(dāng)前值,索引,數(shù)組對象產(chǎn)生新數(shù)組的迭代器方法類似,對數(shù)組的每個元素使用某個函數(shù),并返回新數(shù)組和相似,傳入一個返回值為布爾類型的函數(shù)。 1. 前言 數(shù)組真的是每天用了,但是有很多方法都是記不住,總是要百度查,很煩,所以才寫了個數(shù)組使用總結(jié),有什么不對的希望大家指出來。 2. 思路 先看看這些問題都記得很清楚么? 創(chuàng)建數(shù)組,怎么創(chuàng)建數(shù)組的 數(shù)組的構(gòu)造方法Array有哪些方法?E...
摘要:前言這里記錄我工作學(xué)習(xí)中值得注意的小知識點(diǎn),希望對你有所幫助。循環(huán)的語法在單次循環(huán)開始前執(zhí)行是單次循環(huán)的條件這里即存在是單次循環(huán)結(jié)束后執(zhí)行說明在單次循環(huán)開始前執(zhí)行是單次循環(huán)的條件這里即存在是單次循環(huán)結(jié)束后執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000019583410); 前言:這里記錄我工作、學(xué)習(xí)中值得注意的小知識點(diǎn),希...
閱讀 3517·2021-11-18 10:07
閱讀 1614·2021-11-04 16:08
閱讀 1564·2021-11-02 14:43
閱讀 1122·2021-10-09 09:59
閱讀 879·2021-09-08 10:43
閱讀 1147·2021-09-07 09:59
閱讀 1004·2019-12-27 11:56
閱讀 1084·2019-08-30 15:56