判断数组的方式:
isArray()
Array.isArray([])//true
Array.isArray({})//false
toString(这里的toString是object上面的方法,不是调用者身上的方法)
toString.call({})//"[object Object]" 或者Object.prototype.toString.call({});
toString.call([])//"[object Array]" 或者Object.prototype.toString.call([]);
toString.call(null)//"[object Null]"
toString.call(undefined)//"[object Undefined]"
toString.call()//"[object Undefined]"
toString.call(/[]/)//"[object RegExp]"
toString.call(123)//"[object Number]"
toString.call(‘abc’)//"[object String]"
toString.call(document.querySelector(’.main’)) // ‘[object HTMLDivElement]’
constructor
[].constructor//ƒ Array() { [native code] }
var fn = function(){};fn.constructor//ƒ Function() { [native code] }
var str = ‘abc’;str.constructor//ƒ String() { [native code] }
var obj = {};obj.constructor//ƒ Object() { [native code] } obj.constructor=Object//true
var bol = true;bol.constructor//ƒ Boolean() { [native code] } bol.constructor=Boolean//true
注意:constructor是可读可写的,可以人为更改,所以不一定准确
instanceof 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
var num = 123;
var str = ‘abcd’;
var bol = true;
var obj = {};
var fn = function (){};
var date = new Date();
var reg = /[]/;
console.log(num instanceof Number);//false
console.log(str instanceof String);//false
console.log(bol instanceof Boolean);//false
console.log(obj instanceof Object);//true
console.log([] instanceof Array);//true
console.log([] instanceof Object)// true
console.log(fn instanceof Function);//true
console.log(date instanceof Date);//true
console.log(reg instanceof RegExp);//true
typeof用来检测值类型
instanceof用来检测引用类型