方法一:
使用instanceof操作符。instanceof操作符用來判斷要檢測物件的原型鏈上是否存在某個建構函式的prototype屬性。
var a = {};
var b = ;
console.log(a instanceof
object);//true
console.log(b instanceof
object);//true
使用instanceof操作符有乙個問題就是,它假定只有乙個全域性作用域。如果乙個網頁中有多個框架(iframe元素),那實際上就存在兩個以上不同的全域性執行環境,從而存在兩個以上不同版本的array建構函式,如果你從乙個框架向另乙個框架傳入陣列,那麼傳入的陣列與第二個框架中原生建立的陣列分別具有各自不同的建構函式。傳入的陣列在該框架中用instanceof操作符判斷就會返回false。**如下:
var a = {};
var b = ;
console.log(a instanceof
object);//true
console.log(b instanceof
object);//true
var frame = document.createelement("iframe"); //建立乙個框架
var c = window.frames[0].array; //取得框架全域性執行環境中的array建構函式
var d = new c(); //在框架全域性執行環境中建立乙個陣列d
console.log(d instanceof
array);在當前頁面的執行環境中用instanceof操作符判斷d是否為陣列,返回false
console.log(array.isarray(d)); //true
方法二:
使用ecmascript 5新增的array.isarray()方法。這個方法的作用就是確定某個值到底是不是陣列,而不管它到底是在哪個全域性執行環境中建立的
方法三:
使用object.prototype上的原生tostring()方法判斷。
使用方法如下:
object.prototype.tostring.call(value)
該方法返回乙個[object nativeconstructorname]格式的字串。每個類在內部都有乙個[[class]]屬性,這個屬性中就指定了上述字串中的建構函式名
該方法不能檢測非原生建構函式的函式名,因此開發人員定義的任何建構函式都將返回[object object]
var a = {};
var b = ;
var frame = document.createelement("iframe"); //建立乙個框架
var c = window.frames[0].array; //取得框架全域性執行環境中的array建構函式
var d = new c(); //在框架全域性執行環境中建立乙個陣列d
console.log(object.prototype.tostring.call(a)); //[object object]
console.log(object.prototype.tostring.call(b)); //[object array]
console.log(object.prototype.tostring.call(c)); //[object array]
function
person
()var n = new person();
console.log(object.prototype.tostring.call(n)); //[object object]
判斷乙個物件是否為空
for var i in obj return true 為空 if json stringfy obj else if object.keys obj length 0 else 陣列var arr 1 34 89 0 var arr 1 34 89 0 for var value of arr ...
判斷乙個物件是否為Buffer物件
1 問題背景 不同資料型別物件變數,如何判斷乙個物件是否為buffer物件 2 實現原始碼 you anikdjfijkfjkdsjfkdjfkdjfkdjfkdjfkd anikdjfijkfjkdsjfkdjfkdjfkdjfkdjfkd hai buffer 128 typeof you st...
判斷乙個物件是否是陣列
用typeof方法返回的陣列型別是object,無法確定是否是陣列,但可以通過下面方法判斷。var is array function value 說明 首先判斷這個值是否有值,並且不是undifined或null的值 其次判斷這個值的typeof運算的結果是否是object 第三判斷這個值的len...