1、数据类型
JS的数据类型分为基本类型和引用类型
- 基本类型:String、Number、Boolean、Null、Undefined、Symbol(new in ES6)
- 引用类型:Object(Object、Array、Date、RegExp、Function)
基本类型,存储在栈中,可以直接调用,引用类型存储在堆中,栈中存引用(指向堆的地址)。
这里,简单的对这些数据类型做个说明:
1、Symbol:ES6新增,表示永不相同的数
let sy = Symbol("a");
let sy2 = Symbol("a");
sy === sy2; // false;
2、Date:时间类型
* new Date() // 当前时间
* new Date(year, month, day, hours, minutes, seconds, milliseconds) // 指定年月日时分秒毫秒
* new Date(milliseconds) // 毫秒 1970-1-1 00:00:00 Universal Time, 1970-1-1 08:00:00 GMT+080
* new Date(date string) // 时间格式字符串
3、RegExp: 正则
直接量语法:/pattern/attributes
创建 RegExp 对象的语法:new RegExp(pattern, attributes);
pattern 指定正则表达式的字符串,eg:"[a-z]"。
attributes 【可选】包含属性 "g"【全局匹配】、"i" 【忽略大小写】和 "m"【多行匹配】
4、Function:函数
function a() {
console.log(1);
}
let b = function() {
console.log(1);
}
new Function('c', console.log(1));
2、利用typeof检查类型
typeof 1; // "number"
typeof '1'; // "string"
typeof null; // "object"
typeof undefined; // "undefined"
typeof Symbol("a"); // "symbol"
typeof {}; // "object"
typeof []; // "object"
typeof new Date(); // "object"
typeof /[a-z]/i; // "object"
typeof function a(){}; // "function"
根据结果不难发现,null和引用类型,除了function以外,typeof的结果都是object。这些是需要单独判断的。
附:
- 在js的理念中,引用类型都是对象,function也应该是object,但是由于function有很多特别的地方,所以单独拿出来了。
- null也是比较特殊的,虽然是基本数据类型,但是typeof是“object”,表示空的引用。
2、检查null和除function外的数据类型
1、null
null没有直接的检查方法,但是可以利用以下思路来实现:
typeof null; // "object"
null == undefined; // true
!null; //true
利用这些特性,可得:
let b = null;
typeof b !== "undefined" && b == undefined; // true
2、利用object.constructor属性进行判断
constructor 属性返回对创建此对象的数组函数的引用
let obj = {};
obj.constructor === Object; // true
let arr = {};
arr.constructor === Array; // true
let t = new Date;
t.constructor === Date; // true
let r = /[a-z]/;
r.constructor === RegExp; // true
网友评论