javascript-日常杂记

零碎的知识点……

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函数

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章