JS基础 下
JS原始类型 (3)
Symbol ES6及之后的版本中引入的新原始数据类型。Symbol可以创建唯一标识。
作为对象的key
Symbol.for
Symbol.keyFor //得到一个对象的key
const id = Symbol('foo'); //创建的是局部的Symbol,局部的Symbol即使传同样的key,它们之间也不会相等。
而const foo = Symbol.for(foobar); //创建的是全局的Symbol
私有属性,新的语言标准中private field有些不理想,所以也可以采用Symbol来定义私有属性。
内置Symbol,ES6内置了一些有用的Symbol,可以用来控制对象的一些内部行为
Symbol.iteratior
Symbol.toPrimitive
Symbol.toStringTag
BigInt,是JavaScript新的原始类型,可以精确表示大于2^53-1的整数
BigInt字面量:数字+n
BigInt运算:不能与Number直接进行运算
显式类型转换:BigInt与Number相互转换
JS函数(1)
通过function关键字可以声明一个函数。
函数声明没有块级作用域
函数声明会被提升(hoist)
函数表达式,可以将函数作为对象使用
函数表达式不会被提升(hoist)
函数表达式可以具名也可以匿名
函数表达式具名只能在内部访问
箭头函数,函数表达式的简写
单行的箭头函数可以省略花括号和return
只有一个参数的箭头函数可以省略圆括号
箭头函数不能具名,也没有this上下文
执行上下文(闭包),函数由执行上下文,运行时会产生“闭包”
闭包是运行时由函数调用产生的
通过闭包可访问执行上下文中的数据
如果产生闭包的引用被销毁,闭包被销毁
总结
函数声明无块级作用域,存在hoist
函数表达式可具名或匿名,具名只能内部使用
箭头函数是函数表达式简写
函数由执行上下文,运行时会产生“闭包”
JS函数(2)
this上下文
动态绑定
Function类
this上下文
在函数体内部,可以通过this对象访问函数调用this上下文。所谓函数调用的this上下文,是指函数的实际调用者对象。
setTimeout是直接调用sayHelloTo,而没有通过person去调用,所以函数拿不到person中this.lastName这个东西,所以出现了undefined
箭头函数
箭头函数没有this上下文,利用这一特性,可以让箭头函数访问外部作用域的this上下文。
动态绑定
this上下文在函数调用时可以动态指定,方法是通过函数的call、apply或bind方法来调用。
Function类
函数是Function类的实例,我们可以用Function类动态创建函数对象。
总结
函数的this上下文默认是它的实际调用者
箭头函数没有this上下文,所以可以访问外部的this
我们可以通过call、apply、bind动态绑定
函数是Function类的实例,可以动态创建
JS对象(1)
构造
对象是最基础的复合类型,它是一组属性的集合。对象有几种构造方式。
通过字面量构造
通过构造器构造
通过原型构造
构造器与类
JavaScript是面向对象的编程语言,对象默认的构造器是Object,我们可以定义函数作为构造器或者定义class。
总结
对象构造:字面量、构造器、原型
函数构造器与class
属性定义:标识符、字符串、表达式
属性访问:. 和 [ ]
属性的遍历和增改删
原型机制
原型链和类继承
JS对象(2)
错题情况: