JavaScript 如何判断变量(数据)类型

JavaScript 常见数据类型(7类)

  • 字符串
  • 数字
  • 布尔
  • 数组
  • 对象
  • Null
  • Undefined

值类型的有:字符串、数字、布尔、Undefined
引用类型:数组、对象、Null

通过 typeof 来判断

var a = 8;
var b = '8';
var c = true;
var d = [ 1, 3, 5, 7 ];
var e = { id: 1, name: 'loushengyue' };
var f = function() {
	return 'abc';
};
var g = 10.28;
var h = null;
var i = undefined;
var j = NaN;

console.log(typeof a); //number
console.log(typeof b); //string
console.log(typeof c); //boolean
console.log(typeof d); //object
console.log(typeof e); //object
console.log(typeof f); //function
console.log(typeof g); //number
console.log(typeof h); //object
console.log(typeof i); //undefined
console.log(typeof j); //number

小结:typeof只能用来判断简单(值)类型的变量,不能用来判断引用类型(如:Object,Array)。

通过 instanceof 来判断

概念:instanceof 是指某个对象是否属于某个构造函数的实例对象。

var a = 8,
	b = new Number(8);
console.log(a instanceof Number); //false
console.log(b instanceof Number); //true
console.log(8 instanceof Number); //false
//其他数值类型也同数值一样

var obj = { id: 1 }, //因为{}==new Object()
	obj2 = new Object();
obj2.id = 2;
console.log(obj instanceof Object); //true
console.log(obj2 instanceof Object); //true
console.log(null instanceof Object); //false

var arr = [ 1, 2, 3 ]; //因为[]==new Array()
console.log(arr instanceof Object); //true
console.log(arr instanceof Array); //true

var fn = function() {
	console.log('jjjj');
};

console.log(fn instanceof Object); //true
console.log(fn instanceof Function); //true

小结:instanceof 可以用来判断引用类型(如:Object,Array,Function),它通常需要结合 typeof 来使用,否则容易误判。

通过 toString 来判断(推荐做法)

var a = 8;
var b = '8';
var c = true;
var d = [ 1, 3, 5, 7 ];
var e = { id: 1, name: 'loushengyue' };
var f = function() {
	return 'abc';
};
var g = 10.28;
var h = null;
var i = undefined;
var j = NaN;

myTypeof(a);//[object Number]
myTypeof(b);//[object String]
myTypeof(c);//[object Boolean]
myTypeof(d);//[object Array]
myTypeof(e);//[object Object]
myTypeof(f);//[object Function]
myTypeof(g);//[object Number]
myTypeof(h);//[object Null]
myTypeof(i);//[object Undefined]
myTypeof(j);//[object Number]

function myTypeof(obj) {
	console.log(Object.prototype.toString.call(obj));
}

小结:通过 Object 原型链(prototype)上的 toString 来判断变量的类型是最直观靠谱的,这也是各大框架底层用来判断数据类型的方法。

猜你喜欢

转载自blog.csdn.net/weixin_41424247/article/details/83514153