【JavaScript】第二章 变量类型和计算

  1. JS中使用typeof能得到的哪些类型
  2. 何时使用===何时使用==
  3. JS中有哪些内置函数
  4. JS变量按照存储方式区分为哪些类型,并描述其特点
  5. 如何理解JSON

变量类型

JS中有7种内置类型,7种内置类型又分为两大类型

  • 基本类型/值类型:nullundefinedbooleannumberstringsymbol
  • 对象/引用类型:object

基本类型/值类型

是什么

把每一个值存放在对应变量内存的位置,数据分块存放在内存中,数据之间不会相互影响

var a = 100;
var b = a;
a = 200;
console.log(b); // 100

条件

原始类型存储的都是值,是没有函数可以调用的,比如undefined.toString()
在这里插入图片描述
'1'.toString() 是可以使用的。在这种情况下,'1' 已经不是原始类型了,而是被强制转换成了 String 类型(大写)也就是引用类型,所以可以调用 toString 函数

JS 的number 类型是浮点类型的,在使用中会遇到某些 Bug

  • NaN也属于number类型,并且NaN不等于自身
  • 0.1 + 0.2 !== 0.3

string类型是不可变的,无论你在string类型上调用何种方法,都不会对值有改变

对于null来说,很多人会认为他是个引用类型,其实这是错误的。虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来

对象/引用类型

是什么

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

const a = [];

对于常量 a 来说,假设内存地址(指针)为 #001,那么在地址 #001 的位置存放了值 [],常量 a 存放了地址(指针) #001

当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),也就是说当前变量 b 存放的地址(指针)也是 #001,当我们进行数据修改的时候,就会修改存放在地址(指针) #001 上的值,也就导致了两个变量的值都发生了改变

const a = []
const b = a
b.push(1)

产生原因

若a赋值成一个对象,特别大,a再赋值给b,b也会占很大的空间,不合理,所以引用类型是为了让内存共用空间,好几个变量共用1个内存块,节省内存空间,赋值只是变量指针的赋值,并不是每次赋值都把对象真正的值复制一份,所以值的修改相互干预

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值