写点什么

JavaScript 进阶(上)

用户头像
Augus
关注
发布于: 2 小时前
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

```

用户头像

Augus

关注

爱瞎搞的软件开发工程师 2021.06.10 加入

某摸鱼集团

评论

发布
暂无评论
JavaScript进阶(上)