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

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

  • JavaScript 常见数据类型(7类)
  • 通过 typeof 来判断
  • 通过 instanceof 来判断
  • 通过 toString 来判断(推荐做法)

JavaScript 常见数据类型(7类)

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript语言的第七种数据类型,前六种是:undefinednull、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

  • Undefined
  • Null
  • 布尔(Boolean)
  • 字符串(String)
  • 数值(Number)
  • 对象(Object)
  • Symbol

值类型的有:字符串、数字、布尔、Undefined、Symbol
引用类型:对象(json对象,数组,函数等)、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;
var s1 = Symbol();
var s2 = Symbol.for('s2');

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
console.log(typeof s1); //symbol
console.log(typeof s2); //symbol

小结:typeof只能用来判断简单(值)类型的变量,不能用来判断引用类型(如:Json对象,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

var sy = Symbol('a');
console.log(sy instanceof Symbol); //false

小结: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;
var sy = Symbol('sy');

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]
myTypeof(sy);//[object Symbol]

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

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

你可能感兴趣的:(web基础)