一、JavaScript中的数据类型
JS中的数据类型分为以下七类:
- 6 种原始类型:
- Boolean
- Null
- Undefined
- Number
- String
- Symbol (ECMAScript 6 新定义)
- 和 Object(复杂类型)
Object又分为: - Function
- Array
- Date
- RegExp
二、typeof
操作符
typeof true; // 'boolean';
typeof null; // object
typeof undefined; // undefined
typeof 1; // number
typeof ''; // string
typeof Symbol(); // 'symbol';
typeof []; // object
typeof {}; // object
三、如何区分数组和对象
从上面的结果可知typeof
无法区分数组和对象。总结一些下面的方法来区分它们。
- typeof加length属性
数组有length属性,object没有。
let arrayDeal = ['red', 'green'];
let objectDeal = {'blue', 'yellow'};
function getType (test) {
if(typeof o == 'object'){
if( typeof o.length == 'number' ){
return 'Array';
}else{
return 'Object';
}
}else{
return 'param is no object type';
}
}
instanceof
({}) instanceof Object; // true
([]) instanceof Array; // true
但数组也是属于object,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object。
-
isArray
Array.isArray() 该方法适用于确定传递的值是否为Array。
Array.isArray([1, 2, 3]); // true
Array.isArray({foo: 123}); // false
Object.prototype.toString.call()
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call(''); // [object String]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call(1); // [object Number]
Object.prototype.toString.call(function () {}); // [object Function]
Object.prototype.toString.call(/test/i); // [o
因为返回值是字符串所以可以用.slice(8, -1)
方法去掉[object
和]
。
var getType = function (elem) {
return Object.prototype.toString.call(elem).slice(8, -1);
},