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 来判断变量的类型是最直观靠谱的, 这也是各大框架底层用来判断数据类型的方法.
来源: http://www.css88.com/qa/javascript/11324.html