成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《javascript高級(jí)程序設(shè)計(jì)》筆記:檢測(cè)數(shù)組的方法

wums / 1491人閱讀

摘要:如果網(wǎng)頁中包含多個(gè)框架,那實(shí)際上就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,從而存在兩個(gè)以上不同版本的構(gòu)造函數(shù)。如果你從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,那么傳入的數(shù)組與在第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。

如何檢測(cè)某個(gè)變量是否為數(shù)組?

《javascript 高級(jí)程序設(shè)計(jì)》原文摘錄:

  自從 ECMAScript 3 做出規(guī)定以后,就出現(xiàn)了確定某個(gè)對(duì)象是不是數(shù)組的經(jīng)典問題。對(duì)于一個(gè)網(wǎng)頁,
或者一個(gè)全局作用域而言,使用 instanceof 操作符就能得到滿意的結(jié)果:

    if (value instanceof Array){
    //對(duì)數(shù)組執(zhí)行某些操作
    }

  instanceof 操作符的問題在于,它假定只有一個(gè)全局執(zhí)行環(huán)境。如果網(wǎng)頁中包含多個(gè)框架,那實(shí)
際上就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,從而存在兩個(gè)以上不同版本的 Array 構(gòu)造函數(shù)。如果你從
一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,那么傳入的數(shù)組與在第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自
不同的構(gòu)造函數(shù)。
  為了解決這個(gè)問題,ECMAScript 5 新增了 Array.isArray() 方法。這個(gè)方法的目的是最終確定某
個(gè)值到底是不是數(shù)組,而不管它是在哪個(gè)全局執(zhí)行環(huán)境中創(chuàng)建的。這個(gè)方法的用法如下。

    if (Array.isArray(value)){
    //對(duì)數(shù)組執(zhí)行某些操作
    }

  支持 Array.isArray() 方法的瀏覽器有 IE9+、Firefox 4+、Safari 5+、Opera 10.5+和 Chrome。

那么問題來了,如何在尚未實(shí)現(xiàn)這個(gè)方法中的瀏覽器中準(zhǔn)確檢測(cè)數(shù)組
由于原生數(shù)組的構(gòu)造函數(shù)名與全局作用域無關(guān),因此用toString()方法,保證返回一樣的結(jié)果

   function isArray(value) {
      return Object.prototype.toString.call(value) === "[object Array]";
   }

這樣的方法就可以比較完美的解決判斷是否為數(shù)組了,同樣也可以判斷是不是函數(shù)

   function isFunction(value) {
      return Object.prototype.toString.call(value) === "[object Function]";
   }

是不是正則表達(dá)式

   function isRegExp(value) {
      return Object.prototype.toString.call(value) === "[object RegExp]";
   }

雖然這樣貌似是解決了問題,實(shí)際上這還是會(huì)存在問題:Object.prototpye.toString()本身也可能會(huì)被修改

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84643.html

相關(guān)文章

  • JavaScript高級(jí)程序設(shè)計(jì)》讀書筆記

    摘要:為了每個(gè)對(duì)象都能通過來檢測(cè),需要以或者的形式來調(diào)用,傳遞要檢查的對(duì)象作為第一個(gè)參數(shù),稱為。對(duì)象都是動(dòng)態(tài)的,這就意味著每次訪問對(duì)象,都會(huì)運(yùn)行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 1.理解參數(shù) 1.1 可以向函數(shù)中傳遞任意數(shù)量的參數(shù),并且可以通過arguments對(duì)象來訪問這些參數(shù)。 1.2 arguments對(duì)象只是類似數(shù)組,它通過length來確定傳進(jìn)來...

    dayday_up 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)筆記:變量及變量檢測(cè)

    摘要:變量的特點(diǎn)變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數(shù)據(jù)。 變量的特點(diǎn) js變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數(shù)據(jù)。換句話說, 每個(gè)變量?jī)H僅是一個(gè)用于保存值的占位符而已 js變量可以用來保存任何值,未經(jīng)過初始化的變量,會(huì)保存一個(gè)特殊的值—undefined,如:var msg; js變量的初始化并不會(huì)為它標(biāo)記類型;初始化的過程就是給變量賦一個(gè)值那...

    XiNGRZ 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)-摘要筆記-1

    摘要:說明此摘要筆記系列是我最近看高級(jí)程序設(shè)計(jì)第版隨手所記。摘要筆記本身沒有系統(tǒng)性,沒有全面性可言,寫在這里供有一定基礎(chǔ)的前端開發(fā)者參考交流。對(duì)每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回的項(xiàng)組成的數(shù)組。是的反操作是的反操作第一部分結(jié)束。 說明: 此摘要筆記系列是我最近看《JavaScript高級(jí)程序設(shè)計(jì)(第3版)》隨手所記。 里面分條列舉了一些我認(rèn)為重要的、需要記下的、對(duì)我有幫助的點(diǎn),是按照我看...

    chavesgu 評(píng)論0 收藏0
  • es5學(xué)習(xí)筆記——拜讀JavaScript高級(jí)程序設(shè)計(jì)(持續(xù)更新)

    摘要:當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時(shí),等同于。并且,函數(shù)執(zhí)行完畢后,其活動(dòng)對(duì)象不會(huì)被銷毀,因?yàn)槟涿瘮?shù)的作用域鏈仍然在引用這個(gè)活動(dòng)對(duì)象。知道閉包被銷毀,創(chuàng)建函數(shù)的活動(dòng)對(duì)象才會(huì)被回收。 本著盡可能多的完善基礎(chǔ)知識(shí),打好基礎(chǔ),做一條有夢(mèng)想的咸魚。 1.數(shù)據(jù)類型 基本數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String,一種復(fù)雜數(shù)據(jù)類型Object 2.typeof操...

    reclay 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)筆記:正則表達(dá)式

    摘要:布爾值,表示是否設(shè)置了標(biāo)志。正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回正則表達(dá)式的實(shí)例方法方法是否匹配基本語法參數(shù)為正則表達(dá)式為所要匹配的字符串返回值布爾值在模式與該參數(shù)匹配的情況下返回否則,返回。 高程書中對(duì)正則部分介紹的偏少,特別是元字符部分幾乎沒有介紹;我找了幾篇不錯(cuò)的博客作為收錄:正則表達(dá)式30分鐘入門教程正則表達(dá)式-理論基礎(chǔ)篇正則表達(dá)式-基礎(chǔ)實(shí)戰(zhàn)...

    ingood 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<