JavaScript数据类型

87 阅读3分钟

JavaScript数据类型

‌JavaScript共有八种数据类型,分别是:Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。

基本数据类型--7种

  1. Undefined:表示未定义的值;
  2. Null:表示空值;
  3. Boolean:布尔值,只有 true 和 false两个值;
  4. Number:表示数值,包括整数、浮点数;
  5. String:表示字符串,通常用引号包括;
  6. Symbol:ES6新增的数据类型,用于生成唯一的标识符;
  7. BigInt:用于表示大整数,解决JavaScript中Number类型不能表示的超大整数问题;

引用数据类型--1种

Object: 包括Array(数组)、Function(函数)、Date(日期)、RegExp(正则表达式)、Map、Set等。

Map、Set的特性

  • Map :

    • 键值对存储
    • 键可以是任意类型
    • 有序性(按插入顺序存储元素)
    • 支持迭代
    • 键唯一
    • 键不会被隐式的转换为字符串(json的键会被隐式转换为字符串)

常用方法:set(),get(),has(),delete(),clear(),sizekeys(),values()(size是属性,不用加括号)等

  • Set :

    • 唯一性(集合中的每个元素是唯一的,重复的值会被自动去除)
    • 有序性(它保持元素的插入顺序,遍历时会按插入顺序访问元素)
    • 可以使用任何类型的元素
    • 支持迭代(通过 forEach(), for...of 等方式进行遍历)

常用方法:add(),delete(),has(),clear(),size等,

数据类型的存储方式

  • 基本数据类型 的值直接存储在栈内存中,每个值都是独立的,修改一个变了不会影响其他变了;
  • 引用数据类型 的值存储在堆内存中,变量保存的是对象的内存地址,如果两个变量指向同一个对象,修改其中一个会影响另一个;

检测数据类型

  1. 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。对于这些情况,更推荐使用instanceofArray.isArray()

  1. 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

  1. Array.isArray()
const arr = [];
console.log(Array.isArray(arr)); // 输出: true
  1. 检测数据类型函数封装
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