JavaScript 进阶(上)
写在前面,兜兜转转,来来回回,从开始学习 JS 到现在已经工作这些来年,我和 JS 每天的生活可以用如胶似漆来形容。但自认为对他认识的还不够深刻。故从头再来,从基础开始。Go!!!
### 内置类型
- JS 中分为七种内置类型,七种内置类型⼜分为两⼤类型:基本类型和对象( Object )。
- 基本类型有六种: null , undefined , boolea n, number ,string ,symbol。
- 其中 JS 的数字类型是浮点类型的,没有整型。并且浮点类型基于 IEEE 754 标准实现,在使⽤中会遇到某些 Bug。NaN 也属于 number 类型,并且 NaN 不等于⾃身。
- 对于基本类型来说,如果使⽤字⾯量的⽅式,那么这个变量只是个字⾯量,只有在必要的时候才会转换为对应的类型。
let a = 111 // 这只是字⾯量,不是 number 类型
a.toString() // 使⽤时候才会转换为对象类型
> 对象( Object )是引⽤类型,在使⽤过程中会遇到浅拷⻉和深拷⻉的问题。
let a = { name: 'FE' }
let b = a
b.name = 'EF'
console.log(a.name) // EF
### Typeof
> typeof 对于基本类型,除了 null 都可以显示正确的类型
```V
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof b // b 没有声明,但是还会显示 undefined
```
> typeof 对于对象,除了函数都会显示 object
```V
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'
```
> 对于 null 来说,虽然它是基本类型,但是会显示 object ,这是⼀个存在很久了的 Bug
```V
typeof null // 'object'
```
> PS:为什么会出现这种情况呢?因为在 JS 的最初版本中,使⽤的是 32 位系统,为了性能考虑使⽤低位存储了变量的类型信息, 000 开头代表是对象,然⽽ null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是⼀直流传下来。
- 如果我们想获得⼀个变量的正确类型,可以通过 Object.prototype.toString.call(xx)。这样我们就可以获得类似[object Type]的字符串
```V
let a
// 我们也可以这样判断 undefined
a === undefined
// 但是 undefined 不是保留字,能够在低版本浏览器被赋值
let undefined = 1
// 这样判断就会出错
// 所以可以⽤下⾯的⽅式来判断,并且代码量更少
// 因为 void 后⾯随便跟上⼀个组成表达式
// 返回就是 undefined
a === void 0
```
评论