ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
javascript判断变量的数据类型的方法:
一、通过 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 来判断变量的类型是最直观靠谱的,这也是各大框架底层用来判断数据类型的方法。