基本数据类型
字符串 数字 布耳值 未定义的 空 唯一值 大数字
String Number Boolean undefined null symbol bigInt
// symbol ==> 唯一值 两个完全一样的值用symbol()声明,判断时不会一样
// 在对象里可以用来声明两个一样的键值
console.log(Symbol("wh") === Symbol("wh"));//false
//bigInt ==> 大数字 定义的超过几位进行科学计数 计算的时候结果如果超过给出的,
//最大安全数字(Number.MAX_SAFE_INTEGER)
//后端数据库在定义数字的时候会定义数字的长度
//JS中是有最大安全数字的(js中的数字是有最大长度限制的)
// 会在后面显示0000。不会计算了 。需要计算要是9007199254740991n +1000n
console.log(Number.MAX_SAFE_INTEGER); //最大安全数字 9007199254740991
console.log(Number.MIN_SAFE_INTEGER); //最小安全数字 -9007199254740991
引用数据类型
基类)-- 对象 时间 数组 函数 正则
Object Date Array function RegExp
时间、数组、函数、时间、正则 最底层后component 都会是对象
数据类型判断
typeof
instanceof
constructor
Object.prototype.toString.call()
typeof只能判断基本数据类型; 判断引用数据类型 都返回object
console.log(typeof '你好'); // string
console.log(typeof 123); // number
console.log(typeof null); //bject
console.log(typeof []); //bject
console.log(typeof {}); //bject
console.log(typeof function () { }); //function
typeof用于判断基本数据类型返回的是一个小写类型 --- string
但在基本数据类型中有一个特例null,它返回的是object。
因为浏览器是用c++之类的语言编译的,是一个二进制的
在js中的数据类型有浏览器编译成二进制后 具体是多少不知道。
举例
假如
String //001
Number //010
Boolean //011
undefined //101
Object //000
null //000000
在街上中tyoeof只会取前三位数,所有在编译的是后会吧null当成object
instanceof只有知道数据类型才可以判断 返回的是一个布耳值
语法: 判断数据类型的变量 instanceof Array
let obj = {}
console.log(obj instanceof Object); //true
constructor
语法: 要判断数据类型的变量.constructor === Array
let obj = {}
console.log(obj.constructor === Array); //false]
Object.prototype.toString.call()原生js最全能的数据类型判断
返回的是"[object 数据类型]"
Object.prototype.toString.call({}) // '[object Object]'
Object.prototype.toString.call({}).replace(/^\[object (\S+)\]$/, '$1') // 'Object'
基本数据类型和引用数据类型的区别
基本数据类型是原始值,存储在栈内存中。
引用数据类型,存储在堆内存中他的值是在堆内存中。
每声明一个引用数据类型就会在堆内存中开辟了一块新的内存空间有自己的内存空间地址,我们通过变量来复制一个引用数据类型的时候其实只是把这个开辟的内存空间的地址进行了一个赋值。