数据类型
基本数据类型(原始值类型/值类型)
String 正常字符串\模版字符串
Number (NaN\Infinity) 数字
Boolean 布尔值
null 空 typeof null ==> "object"
undefined 未定义
symbol 唯一值
bigInt 大数字
...
引用(对象)数据类型
Object 基类
{} plainObject
Array
Function
Date
RegExp
...
//symbol
let str = "a";
// "a" === "a" ; true
// Symbol("a") === Symbol("a");// true?
let obj = {
a: 1,
a: 2
};
let obj1 = {
[Symbol("a")]: 1,
[Symbol("a")]: 2
}
// obj.a = 2*/
//bigInt
//后端数据库在定义数字的时候会定义数字的长度
//JS中是有最大安全数字的(js中的数字是有最大长度限制的)
console.log(Number.MAX_SAFE_INTEGER);//js中的最大安全数字
console.log(Number.MIN_SAFE_INTEGER);
//bigInt数据类型
// let bigNum = 9007199254740991n;
// bigNum + 1
// VM616:1 Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
// bigNum + 1n
数据类型判断
1.typeof 能有效检测基本类型,检测引用类型都返回object,其中null属于特殊的引用类型返回object
(typeof null ==> “object”:不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型,null 的二进制表示是6个0,保留前三位,结果自然也是 000,所以执行 typeof 时会返回“object”。)
typeof 运行超过两次以上 最终返回值 都是字符串的 “string”
eg: (typeof typeof typeof 1234) 返回值 ==> string
2.instanceof 只有知道数据类型才可以判断 语法: 要判断数据类型的变量 instanceof Array
- constructor 语法: 要判断数据类型的变量.constructor === Array
4.Object.prototype.toString.call() 原生js最全能的数据类型判断 “[object 数据类型]”
基本数据类型和引用数据类型的区别
值类型栈存储: 主要针对(Number、String、Boolean)三种数据。直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
引用类型堆栈存储: 主要针对Object、Array这两种引用数据以及null, 同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
基本数据类型和引用数据类型在堆栈内存中的执行