JavaScript数据类型
JavaScript共有八种数据类型,分别是:Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。
基本数据类型--7种
- Undefined:表示未定义的值;
- Null:表示空值;
- Boolean:布尔值,只有 true 和 false两个值;
- Number:表示数值,包括整数、浮点数;
- String:表示字符串,通常用引号包括;
- Symbol:ES6新增的数据类型,用于生成唯一的标识符;
- BigInt:用于表示大整数,解决JavaScript中Number类型不能表示的超大整数问题;
引用数据类型--1种
Object: 包括Array(数组)、Function(函数)、Date(日期)、RegExp(正则表达式)、Map、Set等。
Map、Set的特性
-
Map :
- 键值对存储
- 键可以是任意类型
- 有序性(按插入顺序存储元素)
- 支持迭代
- 键唯一
- 键不会被隐式的转换为字符串(json的键会被隐式转换为字符串)
常用方法:set(),get(),has(),delete(),clear(),size,keys(),values()(size是属性,不用加括号)等
-
Set :
- 唯一性(集合中的每个元素是唯一的,重复的值会被自动去除)
- 有序性(它保持元素的插入顺序,遍历时会按插入顺序访问元素)
- 可以使用任何类型的元素
- 支持迭代(通过
forEach(),for...of等方式进行遍历)
常用方法:add(),delete(),has(),clear(),size等,
数据类型的存储方式
- 基本数据类型 的值直接存储在栈内存中,每个值都是独立的,修改一个变了不会影响其他变了;
- 引用数据类型 的值存储在堆内存中,变量保存的是对象的内存地址,如果两个变量指向同一个对象,修改其中一个会影响另一个;
检测数据类型
- typeof 运算符
console.log(typeof 'Hello World'); // 输出: string
console.log(typeof 42); // 输出: number
console.log(typeof true); // 输出: boolean
console.log(typeof undefined); // 输出: undefined
console.log(typeof Symbol()); // 输出: symbol
console.log(typeof BigInt(123456789012345678901234567890)); // 输出: bigint
console.log(typeof null); // 输出: object (这是JS的一个历史遗留问题)
console.log(typeof {}); // 输出: object
console.log(typeof []); // 输出: object
console.log(typeof function() {}); // 输出: function
typeof并不总是能正确判断对象类型,特别是对于数组和null。对于这些情况,更推荐使用instanceof或Array.isArray()
- instanceof 运算符
const arr = [];
console.log(arr instanceof Array); // 输出: true
const obj = {};
console.log(obj instanceof Object); // 输出: true
const func = function() {};
console.log(func instanceof Function); // 输出: true
- Array.isArray()
const arr = [];
console.log(Array.isArray(arr)); // 输出: true
- 检测数据类型函数封装
function getType(data) {
const tempType = typeof data;
if(tempType === 'object'){
if(data === null){
return 'null';
}else if(data instanceof Array){
return 'array';
}else if(data instanceof RegExp){
return 'regexp';
}else if(data instanceof Date){
return 'date';
}else if(data instanceof Map){
return 'map';
}else if(data instanceof Set){
return 'set';
}
}
return tempType;
}
let a;
let b = null;
let c = true;
let d = 123;
let e = 'abc';
let f = Symbol();
let g = BigInt(123456789012345678901234567890);
let h = () => {};
let i = [];
let j = /^1[3-9]\d{9}$/;
let k = new Date();
console.log(getType(a)); // undefined
console.log(getType(b)); // null
console.log(getType(c)); // boolean
console.log(getType(d)); // number
console.log(getType(e)); // string
console.log(getType(f)); // symbol
console.log(getType(g)); // bigint
console.log(getType(h)); // function
console.log(getType(i)); // array
console.log(getType(j)); // regexp
console.log(getType(k)); // date