日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php检测数组类型,javascript中通过哪些方法来检测数组类型?

發布時間:2023/12/1 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php检测数组类型,javascript中通过哪些方法来检测数组类型? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

typeof操作符。

對于Function、String、Number、Undefined這幾種類型的對象來說,不會有什么問題,但是針對Array的對象就沒什么用途了:alert(typeof null); // "object"

alert(typeof []); // "object"

instanceof

當只有一個全局執行環境時適用,如果包含多個框架,就存在兩個以上不同版本的Array構造函數,如果從一個框架向另一個框架傳遞數組,傳入的數組與在第二個框架中原生創建的數組分別具有不同的構造函數,即為不同類型

if (value instanceof Array) {

//對數組執行某項操作

}

Array.isArray() 方法

因為是ES5新增的,只支持IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome

if (Array.isArray(value)) {

//對數組執行某些操作

}

Object.prototype.toString.call()方法

適用于所有環境,只支持原生的對象,Object的toString()方法不能檢測非原生構造函數的構造函數名。開發人員自定義的任何構造函數都將返回[object Object]

原理:在任何值上直接調用Object的原生toString()方法,都會返回[object NativeConstrctorName]格式的字符串,每個類內部都有一個class屬性,這個屬性中就指定了上述字符串中構造函數名。

var value = []

console.log(Object.prototype.toString.call(value))//"[Object Array]"

由于原生數組的構造函數名和作用域無關,因此使用toString()方法就能保證輸出一樣的值。

為什么不使用對象自己的toString() 方法?

var value = []

console.log(value.toString())//" "

value = ['pp','oo']

console.log(value.toString())//"pp,oo"

value = ['pp',"oo"]

console.log(Object.prototype.toString.call(value))//[object Array]

Array的tostring()方法被重寫了(很多原生對象均如此),所以它會調用自己構造函數上的toString()方法,返回其他的字符串

還可以用此方法來判斷是不是原生函數或者正則表達式

function isFunction(value){

return Object.prototype.toString.call(value) === “[object Function]”

}//不適用于IE中以COM對象實現的任何函數

function isRegExp(value){

return Object.prototype.toString.call(value) === “[object RegExp]”

}

對象的constructor屬性

除了instanceof,我們還可以利用每個對象都具有constructor的屬性來判斷其類型,于是乎我們可以這樣做:var arr = [];

alert(arr.constructor == Array); // true

貌似后兩個解決方案是無懈可擊的,但真的是這樣么?天有不測風云,當你在多個frame中來回穿梭的時候,令人沮喪的問題出現了: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]

// 哎呀!

arr instanceof Array; // false

// 哎呀呀!

arr.constructor === Array; // false

由于每個iframe都有一套自己的執行環境,跨frame實例化的對象彼此是不共享原型鏈的,因此導致上述檢測代碼失效!怎么辦怎么辦??嗯,javascript是動態語言,或許萬金油“鴨式辨型”(duck type)可以助我們一臂之力“如果它走起路來像鴨子,叫起來也像鴨子,那就當他是鴨子吧”,同理,可以檢測某些數組對象特有的能力來做判斷,這個法子已經有人用了,比如Prototype框架,來看看它實現的Object.isArray方法:isArray: function(object) {

return object != null && typeof object == "object" &&

'splice' in object && 'join' in object;

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的php检测数组类型,javascript中通过哪些方法来检测数组类型?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。