js的变量是松散类型,也就是不像java语言那样,需要在变量前面申明对象类型,加var后对变量进行申明,类型默认为undefined,当赋值后才确定变量类型。
js变量类型判别方式我所知道的有三种,第一种是typeof,第二种是instanceof,第三种是使用对象原型的tostring方法。
(1)第一种方法typeof:
var a,
b = 1,
c = "1",
d = false,
e = [],
f = {},
g = function(){};
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
console.log(typeof f);
console.log(typeof g);
控制台输出undefined,number,string,boolean,object,object,function.
为什么数组跟对象输出都是object?
我的理解是,数组跟对象是字面量写法,实际上它们等价于
var e = new Array();
var f = new Object();
而引用类型的变量typeof都是输出object.
可以试一下
var a = /./;
console.log(typeof a);//object;
(2)所以为了区分引用类型变量的类型,就可以使用instanceof这个方法了,同样:
var e = [];
var f = {};
var g = function(){};
console.log(e instanceof Array);
console.log(f instanceof Object);
console.log(g instanceof Function);
输出结果:true,true,true.
不过console.log(e instanceof Object)//true 毕竟数组也是由构造函数而来,function也一样。
另外instanceof检查基本类型变量返回false:
var str = "123";
console.log(str instanceof String)//false
console.log("123" instanceof String)//false
(3)最后一种方法:
var str = "123";
var arr = [1,2,3];
console.log(Object.prototype.toString.call(str));
console.log(Object.prototype.toString.call(arr))
输出:[object String],[object Array];
总结:
使用哪种方法要根据实际而定第二种方法确实能够更靠谱地检查出变量类型,但是第一种方法更加简短,如果要判别一个基本类型变量的时候可以使用它。
来源:https://www.cnblogs.com/outside/p/3689900.html