es基础之变量类型

变量类型 #

数组类型分类和判断 #

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

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

undefined boolean number string object function symbol

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

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

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

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

值类型 引用类型 #

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

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

深浅拷贝 #

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

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

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

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‘ == 1
’1‘ == true