es基础之变量类型

变量类型

数组类型分类和判断

定义了6中原始类型:Boolean String Number Null Undefined Symbol

如何判断原始类型?通过typeof就能得到以下值:

1
undefined boolean number string object function symbol

注意:
typeof null === object 这是一个bug,单独记忆
typeof [] === object 不会出现array
typeof Symbol() === symbol新增知识
可以把 undefined 翻译为 未定义。

通过使用 obj.a == null 隐式包含 null 和 undefined 的两层意思。

如何判断实例对应的构造函数,如何判断是不是数组,可以使用 instanceof

1
2
[] instanceof Array // true
new Foo() instaceof Foo // true

值类型 引用类型

值类型: Boolean String Number Undefined Null
引用类型:Date Array Function RegExp 等

引用类型使用同一块内存区域,所以a修改会影响b

深浅拷贝

既然是引用类型,完整拷贝一个对象?
浅拷贝。 Object.assign
如果对象里没有引用类型,都是简单类型

1
2
3
4
5
6
let a = {
age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1

es6 有了展开运算符,也干掉了 assign

1
2
3
4
5
6
let a = {
age: 1
}
let b = { ...a }
a.age = 2
console.log(b.age) // 1

如果对象里有嵌套。那不行了,还是得深拷贝
首先是JSON.stringify 这样有问题:

  • 忽略undefined
  • 忽略 symbol
  • 不能序列号函数
  • 不能解决循环引用的对象
    一般情况下可以干。

deepClone
lodash 的深拷贝函数https://link.juejin.im/?target=https%3A%2F%2Flodash.com%2Fdocs%23cloneDeep

类型转换

== 隐式转换。

1
2
’1‘ == 1
’1‘ == true

请我喝杯咖啡吧~