javascript类型判断(typeof instanceof ,toStirng.call())
对typeof instanceof Object.prototype.toString.call(),比较
最近写代码时遇到了对一个变量是arry还是String进行判断,开始使用typeof,发现有问题,来了兴致就把这个方面都研究了下.
typeof
function testTypeof(){ var str ="aa"; var obj = {}; var num = 99; var bl = true; var nu = null; var und ; function Person(name){ this,name = name; }; var person = new Person("aa"); var arr = []; var data = Date.now(); var reExp = /\[bc\]at/i; var fu = function fu(){}; console.log(typeof str ); //String console.log(typeof str=='object' ); //false console.log(typeof obj ); //object console.log(typeof str=='object' ); //false console.log(typeof num ); //number console.log(typeof str=='object' ); //false console.log(typeof bl ); //boolean console.log(typeof str=='object' ); //false console.log(typeof nu ); //object console.log(typeof str=='object' ); //false console.log(typeof und ); //undefined console.log(typeof str=='object' ); //false console.log(typeof person ); //object console.log(typeof str=='object' ); //false console.log(typeof arr ); //object console.log(typeof str=='object' ); //false console.log(typeof data ); //number console.log(typeof str=='object' ); //false console.log(typeof reExp ); //object console.log(typeof str=='object' ); //false console.log(typeof fu ); //function console.log(typeof str=='object' ); //false }
- 总结:在基本类型 String,Number,boolean,undefined function 类型判断时可以使用
instanceof
function testInstanceof(){
var str ="aa";
var obj = {};
var num = 99;
var bl = true;
var nu = null;
var und ;
function Person(name){
this,name = name;
};
var person = new Person("aa");
var arr = [];
var data = Date.now();
var reExp = /\[bc\]at/i;
var fu = function fu(){};
console.log(str instanceof String); //false
console.log(str instanceof Object); //false
console.log(obj instanceof Object); //true
console.log(num instanceof Number); //false
console.log(num instanceof Object); //false
console.log(bl instanceof Boolean); //false
console.log(bl instanceof Object); //false
console.log( nu instanceof Object ); //false
console.log(und instanceof Object ); //false
console.log(person instanceof Person ); //true
console.log(person instanceof Object ); //true
console.log(arr instanceof Array); //true
console.log(arr instanceof Object ); //true
// console.log(data instanceof Data); //false
console.log(data instanceof Object); //false
// console.log(reExp instanceof ReExp ); //false
console.log(reExp instanceof Object ); //true
console.log(fu instanceof Function); //true,
console.log(fu instanceof Object); //true
}
- 总结:如上所看,instanceof 在引用类型方面使用比较合适,原始object,自定义对象,Function,特别是自定义对象
Object.prototype.toString.call()
function testStirngCall(){
var str ="aa";
var obj = {};
var num = 99;
var bl = true;
var nu = null;
var und ;
function Person(name){
this,name = name;
};
var person = new Person("aa");
var arr = [];
var data = Date.now();
var reExp = /\[bc\]at/i;
var fu = function fu(){};
console.log(Object.prototype.toString.call(str)); //[object String]
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(num)); //[object Number]
console.log(Object.prototype.toString.call(bl)); // [object Boolean]
console.log(Object.prototype.toString.call(nu)); //[object Null]
console.log(Object.prototype.toString.call(und)); //[object Undefined]
console.log(Object.prototype.toString.call(person)); // [object Object]
console.log(Object.prototype.toString.call(arr)); // [object Array]
console.log(Object.prototype.toString.call(data)); // [object Number]
console.log(Object.prototype.toString.call(reExp)); // [object RegExp]
console.log(Object.prototype.toString.call(json)); // [object Function]
}
- 除了自定义对像person,不能识别,其他都能识别,完胜