基本类型:string number null undefined boolean symbol bigint 7种,存放在栈(stack)中线性结构,先进后出。
引用类型:对象(Object) 1种 数组(Array)、函数(Function)也算object,数据存储在堆(heap)中,
地址指针是存储于栈(stack)中。深拷贝是拷贝地址指针和基本数据,浅拷贝只拷贝地址指针。
特殊的对象:正则(RegExp)和日期(Date)
symbol
是es6新增,表示独一无二的值,最大的用法是用来定义对象的唯一属性名
let sy = Symbol("KK");
console.log(sy); // Symbol(KK)
typeof(sy); // "symbol"
// 相同参数 Symbol() 返回的值不相等
let sy1 = Symbol("kk");
sy === sy1; // false
bigint
js的number类型最大可以为 2^53 - 1,bigint可以比它大,用来定义大整数。es11新增
//定义和初始化 bigint常量
const bigIntNum = 9007199254740991n;
const bigIntNum1 = BigInt(9007199254740991);
console.log(bigIntNum === bigIntNum1)
//和Number比较
const bNum = 3n;
const Num = 3;
console.log(bNum == Num,bNum === Num);//true false
类型检测
hasOwnProperty 检测属性是否为对象的自有属性,如果是,返回true,否者false,此方法无法检查该对象的原型链中是否具有该属性
object.hasOwnProperty(proName)
constructor 属性返回对创建此对象的数组函数的引用 属性值是指向创建当前实例的对象的
[].constructor == Array //true
Object.constructor == Object //false
原型链被改变会报错
var arr = [];
arr.__proto__ = String
arr.constructor == Array //false
instanceof 检测这个实例对象是不是这个方法new出来的
[] instanceof Array //true
Number instanceof Number //false
String instanceof String //false
Object instanceof Object //true
Function instanceof Function //true
Function instanceof Object //true
function Foo(){}
Foo instanceof Function //true
Foo instanceof Foo //false
typeof 用于检测基本类型
typeof undefined;//=> undefined
typeof 'a';//=> string
typeof 1;//=> number
typeof true;//=> boolean
typeof {};//=> object
typeof [];//=> object
typeof function() {};//=> function
typeof null;//=> object