js_数据类型

六种原始数据类型:undefined,null,number,string,boolean,Symbol
一种引用数据类型:Object
null和undefined的区别
null值表示一个空对象指针
类型上:
typeof null === ‘object’
typeof undefined = 'undefined’
数值上:
Number(null) === 0
Number(undefined) === NaN
但是注意null==0、undefined==0都为false,记住null和undefined比较类型时都不做自动的类型转换。
Symbol:
作用:保证每个属性的名字都是独一无二的,实现一个唯一的不重复的不可改变的值(独一无二的值),防止变量或属性名重名。

arr=Object.getOwnPropertySymbols(popUp);

之所以把数据类型区分为两种不同的类型,是因为它们在内存中存放的位置不一样。原始类型的数据是存放在栈中的,引用类型的数据是存放在堆中的,JavaScript 引擎并不是直接将该对象存放到变量环境中,而是将它分配到堆空间里面,分配后该对象会有一个在“堆”中的地址,然后再将该数据的地址写进栈中变量的变量值,堆中的数据通过引用和栈中的变量关联起来。
在这里插入图片描述
从上图可以看出,对象类型是存放在堆空间的,在栈空间中只是保留了对象的引用地址,当 JavaScript 需要访问该数据的时候,是通过栈中的引用地址来访问的。
为什么一定要分“堆”和“栈”两个存储空间呢?所有数据直接存放在“栈”中不就可以了吗?答案是不可以的。这是因为 JavaScript 引擎需要用栈来维护程序执行期间上下文的状态,如果栈空间大了话,所有的数据都存放在栈空间里面,那么会影响到上下文切换的效率,进而又影响到整个程序的执行效率

在 JavaScript 中将一个原始类型的变量 a 赋值给 b,那么 a 和 b 会相互独立、互不影响;但是将引用类型的变量 c赋值给变量 d,那会导致 c、d 两个变量都同时指向了堆中的同一块数据。
在这里插入图片描述
闭包也是存放在堆中的!!!

Object上的一些方法
Object.assign(target,source)浅拷贝
Object.defineProperty()直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。Object.defineProperty(obj, prop, descriptor)
Object.entries(obj).forEach([key,val])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值