在开发中,需要经常去判断数据类型,下面就总结下js中常用的判断类型方法
var a,
b = null,
c = 'aa',
d = 1,
e = {
name: 'ee',
id: 1
},
f = function () {
var yy = '函数';
console.log(yy);
},
g = false,
h = true,
i = ['1', '2', '3'];
typeof:
-
共有 7 种返回值, 返回的值都是 字符串 类型。
- undefined
console.log(typeof(a)); // undefined 未赋值 console.log(typeof(z)); // undefined 未定义- string
console.log(typeof(c)); // string- number
console.log(typeof(d)); // number console.log(typeof(NaN)); // number- boolean
console.log(typeof(g)); // boolean console.log(typeof(h)); // boolean- function
console.log(typeof(f)); // function-
object
typeof() 对数组、null都返回 object,所以在检测 数组、null 数据类型时不能使用 typeof ()方法。
console.log(typeof(e)); // object console.log(typeof(i)); // object 是个数组 console.log(typeof(b)); // object null- symbol
这个类型很少用,
console.log(typeof Symbal('aa')); // symbol
instanceof
- instanceof 运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。
obj instanceof Object // 实例 obj 在不在 Object 构造函数中。
console.log(e instanceof Object); // true
console.log(e instanceof Function); // false
console.log(f instanceof Object); // true
console.log(f instanceof Function); // true
console.log(Object instanceof Function); // true;
console.log(Function instanceof Object); // true
console.log(i instanceof Object); // true
console.log(i instanceof Function); // false
Object.prototype.toString.call()
- 这个检测方法可以检测到所有类型
console.log(Object.prototype.toString.call(a)); // [object Undefined]
console.log(Object.prototype.toString.call(b)); // [object Null]
console.log(Object.prototype.toString.call(c)); // [object String]
console.log(Object.prototype.toString.call(d)); // [object Number]
console.log(Object.prototype.toString.call(e)); // [object Object]
console.log(Object.prototype.toString.call(f)); // [object Function]
console.log(Object.prototype.toString.call(i)); // [object Array]
console.log(Object.prototype.toString.call(g)); // [object Boolean]
介绍几种判断一个对象是否是数组的方法
- Array.isArray(obj); 无法判断是否是空数组。
Array.isAray([]); // true
Array.isAray({}); // false
- array instance Array 无法判断是否是空数组。
console.log([] instanceof Array); // true
- Object.prototype.toString.call(array)
console.log(Object.prototype.toString.call([]) === "[object Array]"); // true
- array.constructor
console.log([].constructor === Array); // true
看一下如何判断一个Object
- obj instanceof Object
console.log( {} instanceof Object); // true
但是这个方法有局限性。
console.log([] instanceof Object); // true
因为数组也是对象,所以也会返回 true。
- Object.prototype.toString.call(obj)
console.log(Object.prototype.toString.call({}) === "[object Object]");
这个方法是最好的。
- obj.constructor
console.log({}.constructor === Object); // true;
这个方法也不错。
总结一下:在实际工作中,我们经常使用 (!!someData) 来判断某个字段是否存在。具体的数据类型判断可以使用上面介绍的方法。简单数据类型可以使用 typeof 来进行判断。