1、檢測數(shù)組:
- typeof運(yùn)算符不能檢測數(shù)組
console.log(typeof ["長老姓糖","25"]);//object
- ECMAScript 5的isArray函數(shù)是原生的檢測方法,但低版本瀏覽器不支持
function isArray(obj) {
return Array.isArray(obj);
}
var arr = ["長老姓糖","25"]; //創(chuàng)建一個數(shù)組
isArray(arr); // true
- 對象自身的constructor屬性和instanceof操作符雖然也能檢測數(shù)組,但在frame中會產(chǎn)生問題
var arr = ["長老姓糖","25"];
console.log(arr.constructor === Array); // true
console.log(arr instanceof Array); // true
// 創(chuàng)建iframe并添加到DOM中
var iframe = document.createElement('iframe'); //創(chuàng)建iframe
document.body.appendChild(iframe); //將創(chuàng)建的iframe添加到body中
otherArray = window.frames[window.frames.length - 1].Array;
var arr = new otherArray("長老姓糖","25"); //聲明數(shù)組 ["長老姓糖","25"]
console.log(arr instanceof Array); // false
console.log(arr.constructor === Array); // false
- 對象原生toString檢測也能檢測數(shù)組
isArray = function(obj) {
return Object.prototype.toString.call(obj) == "[object Array]";}
var arr = ["長老姓糖","25"];
console.log(isArray(arr)); // true
- 最佳檢測方法
var isArray = (function () {
if (Array.isArray()) {
return Array.isArray();
}
return function (subject) {
return Object.prototype.toString.call(subject) === "[object Array]";
};
}());
var arr = [];
isArray(arr); // true
2、檢測屬性:
JavaScript對象的屬性分為兩種存在形態(tài). 一種是存在實例中, 另一是存在原型對象中.
根據(jù)上述, 檢測屬性的時候會出現(xiàn)4種情況
既不存在實例中, 也不存在原型對象中
存在實例中, 不存在原型對象中
不存在實例中, 存在原型對象中
既存在實例中, 也存在原型對象中
可以用in運(yùn)算符。var object={ name="",age=""}
;利用if("name" in object){...}
就可以了;
另外可以用object.hasOwnProperty()函數(shù)來判斷實例屬性(如果這個屬性存在于該對象的原型中,則返回false),另外在Dom對象中,因為Dom對象并不繼承自object,所以并沒有這個方法,應(yīng)該先檢測DOM對象存不存在。
結(jié)合in操作符和hasOwnProperty()就可以自定義函數(shù)來檢測原型中是否存在給定的屬性.
functino Person() {};
Person.prototype.name = 'apple';
var person1 = new Person();
var person2 = new Person();
person1.name = 'banana';
function hasPrototypeProperty(object, name) {
return !object.hasOwnPrototype(name) && (name in object);
}
console.log(hasPrototypeProperty(person1, 'name')); //false
console.log(hasPrototypeProperty(person2, 'name')); //true
原型中存在給定屬性, 返回true(情況3). 否則返回false(情況1/情況2/情況4).