零碎的知识点……
1.空值合并运算符(Nullish coalescing operator)
const foo = null ?? 'default string';
2.js中的假值有哪些?
[0, '', NaN, null, undefined]
3.javascript和native通信的场景
4.javascript的数组索引取值是怎么进行的?
可以将数组的索引用引号引起来,比如 years[2] 可以写成 years['2']。 years[2] 中的 2 会被 JavaScript 解释器通过调用 toString 隐式转换成字符串,然后取值。
5.javascript执行上下文和执行栈
https://mp.weixin.qq.com/s/3fW_OvnyX-uk_9NfbJKcDw
三种js上下文:全局执行上下文、函数执行上下文(包括arguments)、eval执行上下文
执行上下文的生命周期:创建阶段、执行阶段、回收阶段
在创建阶段,先创建变量对象,再创建作用域链(scope chain),当作用域链开始解析对象时,先从代码最内层嵌套开始,向上查找变量对象,最后确定this指向。
在执行阶段,变量赋值、代码执行。
在回收阶段,执行上下文出栈,等待虚拟机回收执行上下文。
变量声明提升:即使变量在被声明之前使用,也不会报错,此时变量值是undefined,提升到上下文头部。
函数声明提升:函数定义可以直接声明function a或者函数表达式声明 var a = function。
函数与变量同名时:函数优先级高,变量会被覆盖,但是可以可以重新赋值,从上到下执行。
this的值是在执行阶段的时候才能确认,定义的时候不能确认。
改变this指向的五种方法:fn.call 、fn.apply 、fn.bind、 with 、箭头函数, 都可以。
执行上下文栈:管理执行上下文。js引擎通过上下文栈来存储函数,遵循先进后出,所以window是最后一个出栈的。js是单线程,所有的上下文都要排队顺序执行。内建的异常机制都是沿着函数调用栈的函数调用逆向搜索,直到遇到异常处理代码为止。
6.eval(不怎么用,一直记不住,哈哈哈)
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
console.log(eval(“2+2”)) // 4
7.with语句
扩展一个语句的作用域链。
8.console.time 计时器 测试环境评估性能
console.time("answer time"); alert("Click to continue"); console.timeLog("answer time"); alert("Do a bunch of other stuff..."); console.timeEnd("answer time");
9.polyfill
将新 API 转换为旧浏览器可以理解的代码。
Babel是转换新语法,polyfill是转换新的api。那哪些是新语法,那些是新的api呢?
举个例子:
新的语法:箭头函数、es6的class、let symbol声明
新的api:Array.of, Array.from、promise/map/set/include、generator、async函数