前言
JavaScript是每个前端开发人员的基础,但是许多知识点会经常遗忘,所以就有了这一系列的文章来整理与总结,用来加深我的理解与学习
数据类型
JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type)
原始类型
原始类型有哪几种?
- number
- string
- null
- undefined
- boolean
- symbol
首先原始类型存储的都是值,所以并不能调用函数,比如null.toString():

可能你会有点奇怪,为什么'1'.toSring()可以调用。这是因为,在这种情况下,'1'已经被强转化为String类型也就是对象类型了,所以是可以调用toSring()函数的。
总的来说,number、string、boolean都有对应的函数方法可以调用,因为它们都有对应的对象类型Number、String、Boolean对象,当然对象是有函数调用的;而null、undefined是没有函数调用的;
对象类型
对象类型与原始类型主要有哪些区别?
在JS中,当然除了原始类型其他都是对象类型。对象类型与原始类型主要不同是,对象类型存储的是地址(指针),而原始类型存储的是值。
当你创建一个对象类型的时候,计算机就会在内存中开辟一个空间用来存储这些值,但是我们需要找到这个空间,就需要这个空间的地址(一个指针)
1 | const a = {} |
对于常量a来说,假设内存地址为#001,那么在地址#001的位置放了值{},常量a存放了地址(指针)#001,接下来:
1 | const a = {} |
当我们赋值给另一个变量时,其实复制的原本变量是地址(指针),也就是说变量b存放的是地址(指针)#001。当我们进行修改的时候,就会修改存放在地址(指针)#001上的值,所以导致了a、b两个变量的值改变。
接下来我们来看函数参数是对象的情况:
1 | function person(p) { |
为什么结果是那样的呢?
- 首先,函数传参传的是指针的副本
- 到函数内部修改参数属性时,
p1也被修改了 - 但是当我们重新为
p分配一个对象时,p拥有了一个新的地址(指针),但和p1并没有什么关系,最终导致了两个变量的值并不相同
本文完, 感谢阅读。