为了账号安全,请及时绑定邮箱和手机立即绑定

前端进阶之JS中基本类型,复杂类型以及那个让人头大的null

标签:
Html/CSS

JS的基本类型(primitive values)有

  • Undefined

  • Null

  • Boolean

  • String

  • Symbol (ES2015新增)

  • Number

  • Object

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。

鱼头注:在最新的ECMA proposal里有个处于Stage 3的基本数据类型 BigInt ,用于表示比253大的所有数字。

具体可参考:

tc39.github.io/proposal-bi…

null是对象吗?

在ECMA文档里的定义是:

原始值,表示缺省任何对象值(object value)

typeof null === 'object'是个早在第一版的JS就存在的BUG。在这个版本里,JS值是以 32位 为单位存储的,由**小型标记(1 - 3位)**和 真实值 组成。类型标签存储在低位的单元里。其中5个是:

  • 000对象(object)

  • 1整型(int)

  • 010双精度浮点型(double)

  • 100字符串(string)

  • 110布尔值(boolean)

两种特殊值

  • undefined (JSVAL_VOID):-2的30次方以内的整数

  • null (JSVAL_NULL) :机器码 NULL 空指针,空指针引用 加上 对象标记还是 0,所以有 Number(null) === 0typeof null === 'object'

复杂类型

JS的复杂类型只有 Object 一种。

在计算机科学中, 对象是指内存中的可以被 标识符引用的一块区域。

在 Javascript 里,对象可以被看作是一组属性的集合。用 对象字面量语法 来定义一个对象时,会自动初始化一组属性。而后,这些属性还可以被增减。属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值**(Symbol)**。

JS基本类型与复杂类型的区别

基本类型存储的是值,复杂类型存储的是地址(指针)。

当你创建了一个复杂类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。

当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),当我们进行数据修改的时候,就会修改存放在地址(指针) 上的值。



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
109
获赞与收藏
602

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消