深入学习 JavaScript | 青训营笔记

78 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

君子性非异也,善假于物也

image.png 这一段代码好不好呢?

在实际的开发中,我们需要牢记各司其责的原则,尽量避免使用JS直接对样式进行操作,而转为使用class进行状态的表示。

在实际的开发工作中,我们只需要做到第二个版本的程度就可以了。在完成功能的基础上,可以在进行进一步的零JS方案。

JavaScript:

  • 继承、原型链、this指向、设计模式、call, apply, bind,;
  • new实现、防抖节流、let, var, const 区别、暂时性死区、event、loop;
  • promise使用及实现、promise并行执行和顺序执行;
  • async/await的优缺点;
  • 闭包、垃圾回收和内存泄漏、数组方法、数组乱序, 数组扁平化、事件委托、事件监听、事件模型

js的数据类型的转换

在 JS 中类型转换只有三种情况,分别是:

  • 转换为布尔值(调用Boolean()方法)
  • 转换为数字(调用Number()、parseInt()和parseFloat()方法)
  • 转换为字符串(调用.toString()或者String()方法)

undefined 与 undeclared 的区别?

已在作用域中声明但还没有赋值的变量,是 undefined。相反,还没有在作用域中声明过的变量,是 undeclared 的。

对于 undeclared 变量的引用,浏览器会报引用错误,如 ReferenceError: b is not defined 。但是我们可以使用 typ eof 的安全防范机制来避免报错,因为对于 undeclared(或者 not defined )变量,typeof 会返回 "undefined"。

null 和 undefined 的区别?

首先 Undefined 和 Null 都是基本数据类型,这两个基本数据类型分别都只有一个值,就是 undefined 和 null。

undefined 代表的含义是未定义, null 代表的含义是空对象(其实不是真的对象,请看下面的注意!)。一般变量声明了但还没有定义的时候会返回 undefined,null 主要用于赋值给一些可能会返回对象的变量,作为初始化。

undefined 在 js 中不是一个保留字,这意味着我们可以使用 undefined 来作为一个变量名,这样的做法是非常危险的,它 会影响我们对 undefined 值的判断。但是我们可以通过一些方法获得安全的 undefined 值,比如说 void 0。

当我们对两种类型使用 typeof 进行判断的时候,Null 类型化会返回 “object”,这是一个历史遗留的问题。当我们使用双等 号对两种类型的值进行比较时会返回 true,使用三个等号时会返回 false。

{}和[]的valueOf和toString的结果是什么?

{} 的 valueOf 结果为 {} ,toString 的结果为 "[object Object]" [] 的 valueOf 结果为 [] ,toString 的结果为 ""

Javascript 的作用域和作用域链

作用域: 作用域是定义变量的区域,它有一套访问变量的规则,这套规则来管理浏览器引擎如何在当前作用域以及嵌套的作用域中根据变量(标识符)进行变量查找。

作用域链: 作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和 函数。

作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前 端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是全局对象)始终是作用域链的最后一个对象。

当我们查找一个变量时,如果当前执行环境中没有找到,我们可以沿着作用域链向后查找。

作用域链的创建过程跟执行上下文的建立有关....