日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

JAVAScript 判斷數組的幾種方法及其利弊。

1. typeof

對于 Function、String、Number、Undefined 等幾種類型的對象來說,他完全可以勝任。但是為 Array 時:

var arr = [1, 2, 3]
console.log(typeof arr) // "object"

// 同樣的
console.log(typeof null) // "object"
console.log(typeof {}) // "object"

所以不能使用 typeof 來判斷。

2. instanceof

instanceof 運算符用于檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。

var arr = [1, 2 ,3]
console.log(arr instanceof Array) // true

3. 原型鏈(constructor)

一般情況下,除了 undefined 和 null,其它都能使用 constructor 判斷類型。

var arr = [1, 2, 3]
console.log(arr.__proto__.constructor === Array) // true
console.log(arr.constructor === Array) // true

// 注意:arr.__proto__ === Array.prototype 為 true。

但是某些情況下,判斷是不準確的,比如:

// 構造函數
function Fn() {}
// 修改原型對象
Fn.prototype = new Array()
// 實例化對象
var fn = new Fn()

console.log(fn.constructor === Fn) // false
console.log(fn.constructor === Array) // true
// 此時的 fn 應該是一個普通對象,而非數組,所以此時使用 constructor 判斷是不合適的。

使用 instanceof 和 constructor 的局限性:

使用和聲明都必須是在當前頁面,比如父頁面引用了子頁面,在子頁面中聲明了一個 Array,將其賦值給父頁面的一個變量,那么此時做原型鏈的判斷:Array === object.constructor 得到的是 false,原因如下:

Array 屬于引用型數據,在傳遞過程中,僅僅是引用地址的傳遞。 每個頁面的 Array 原生對象所引用的地址是不一樣的,在子頁面聲明的Array 所對應的構造函數是子頁面的 Array 對象;父頁面來進行判斷,使用的 Array 并不等于子頁面的 Array。

看代碼:

var iframe = document.createElement('iframe')
document.body.AppendChild(iframe)
var xArray = window.frames[window.frames.length - 1].Array
var xarr = new xArray()
var arr = new Array()

// 不同頁面,結果并非我們所預期的 true,而是 false 哦!
console.log(xarr instanceof Array) // false
console.log(xarr.constructor === Array) // false

// 同頁面才是 true 哦!
console.log(arr instanceof Array) // true
console.log(arr.constructor === Array) // true

4. Object.prototype.toString

該方法通用。

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]'
}

5. Array.isArray

isArray() 方法是 ES5 標準提供的一個判斷數組方法。

function isArray(arr) {
  return Array.isArray(arr)
}

綜上所述,提供一個完整可靠的方法,如下:

function isArray(arr) {
  const toString = Object.prototype.toString
  const isArray = Array.isArray || function (arg) { return toString.call(arg) === '[object Array]' }
  return isArray(arr)
}

分享到:
標簽:數組 JavaScript
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定