这两个方法都可以用来判断变量类型
区别:前者是判断这个变量是什么类型,后者是判断这个变量是不是某种类型,返回的是布尔值
(1)typeof
typeof返回一个数据类型的字符串,而且都是小写的字符串,返回值有'number','boolean','string','function','object','undefined'这几个
typeof
100;
//'number'
typeof
(1==1);
//'boolean'
typeof
'onepixel'
;
//'string'
typeof
{} ;
//'object'
typeof
onepixel;
// 'undefined'
typeof
parseInt;
// 'function'
typeof
[];
//'object'
typeof
new
Date();
//'object'
缺陷:
1.不能判断变量具体的数据类型比如数组、正则、日期、对象,因为都会返回object,不过可以判断function,
如果检测对象是正则表达式的时候,在Safari和Chrome中使用typeof的时候会错误的返回"function",其他的浏览器返回的是object.
2.判断null的时候返回的是一个object,这是js的一个缺陷,判断NaN的时候返回是number
[]
instanceof
Array;
//true
{}
instanceof
Object;
//true
new
Date()
instanceof
Date;
//true
function
Person(){};
[]
instanceof
Object;
//true
new
Date()
instanceof
Object;
//tru
new
Person
instanceof
Object;
//true
var array = new Array()
array instanceof Array //true
用法:typeof经常用来检测一个变量是不是最基本的数据类型,instanceof简单说就是判断一个引用类型的变量具体是不是某种类型的对象。
因为js中的一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:
console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call('123')) //[object String]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(function(){})) //[object Function]
判断是否为函数
function isFunction(it) {
return Object.prototype.toString.call(it) === '[object Function]';
}
判断是否为数组:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
利用这个特性,可以写一个比typeof instanceof更准确的判断方法:
var type = function (o) {
var s = Object.propertype.toString.call(o)
return s.match(/\[object(.*?)\]/)[1].toLowerCase()
}
type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"复制代码
其他方法总结:
var a = [1, 2, 3]
var b = {}
Array.isArray(a) // true
Array.isArray(b) // false