最近在匆匆看了`webpack@4.0
文档之后,又被
《你不知道的JavaScript》吸引了目光。这本书针对
JavaScript`中存在的一些容易出错的地方进行解答,可以夯实自己的基础。
类型
JavaScript
有七种内置类型,包括null
undefined
number
string
boolean
object
和symbol
(ES6)
JavaScript
的变量是没有类型的,有类型的是值。但变量持有值的类型。类型定义了值的行为特征undefined
表示声明后但未赋值的,undeclared
表示未声明的。这两者有稍微的区别,但在JavaScript
中并未区分我们可以通过
typeof
指令来确定值的类型
可以很清楚的发现通过typeof
指令能得到大多数值的类型,然而这里没有出现null
object
相关代码。这是因为typeof null
的结果也是object
,这是JavaScript
设计的错误,所以如果想判断是否类型为null
,可以通过1
!a&&typeof a === 'object'
我们可以使用
typeof
指令来检查undeclared
变量,因为typeof
有安全防范机制(阻止报错)
值
数组(
array
)、字符串(string
)、数字(number
)是JavaScript
的程序基本组成部分,但在使用过程中,还是有一些坑
数组
相对于其他强类型语言来说,
JavaScript
中的数组是不用事先声明数组容量和类型的,所以数组可以容纳任意类型的值
- 可以使用
delete
运算符删除数组中的元素,但数组的长度并不会减少 - 数组是通过数字索引来获取值的,但由于数组同样是对象,所以可以通过对象的方式获取值
1
2
3
4
5
6
7var a = []
a[0] = 1
a['today'] = 'sunday'
a.length // 1
a['today] // 'sunday'
a.today // 'sunday'
这里有两点要注意的是,使用字符串键值来赋值的话,数组的长度并不会增加;如果字符串键值是可以被强制转换为数字的值的话,会被当做数字索引来处理
1
2
3 a['2018'] = 2018
a['2018'] // 2018
a[2018] //2018
所以通过数组来存放字符串键值/属性并不是很合适的做法,应该使用对象
类数组
类数组是具有数组的某种特性(可以通过数字索引)的值,我们可以通过某些方式,例如
slice
,concat
等数组工具函数来实现将其转换为真正的数组
如上图的两种方法,都可以将类数组转换为真正的数组
字符串
字符串和数组很相似,都由
length
属性以及indexOf()
、concat()
方法,但字符串不等于字符数组
- 字符串是不可变的,而数组是可变的。这里指的不可变是字符串的原始成员不会被改变值,而是会创建并返回一个新的字符串
字符串和数组可以通过函数进行相互的处理,这在某些时候是很方便的
数字
JavaScript
只有一种数值类型:数字(number),包括整数以及带小数的十进制数。可以使用
toFixed
保留小数部分位数(但有坑)1
12.toFixed(3) //SyntaxError
如果直接使用值去调用数值方法,将会报错,因为解析的时候会认为12.
是整体,可以通过以下方法调用数值方法