- JS中使用typeof能得到的哪些类型
- 何时使用
===
何时使用==
- JS中有哪些内置函数
- JS变量按照存储方式区分为哪些类型,并描述其特点
- 如何理解JSON
变量类型
JS中有7种内置类型,7种内置类型又分为两大类型
- 基本类型/值类型:
null
、undefined
、boolean
、number
、string
、symbol
- 对象/引用类型:
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个内存块,节省内存空间,赋值只是变量指针的赋值,并不是每次赋值都把对象真正的值复制一份,所以值的修改相互干预