大家好,我是鼠目。「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
今天我来总结一下,前端程序员需要知道的js知识。但是不详谈,可以作为一个知识梳理自行查漏补缺,或者等读者后续更新
js预编译
我们通常将javascript归类为动态或者解释执行语言,也就是JIT(just in time)即使编译。它跟普通的静态编译AOT(Ahead of time)语言不同,不需要在执行前全部翻译为机器码,而是一句一句边翻译边运行的。
我们在程序编写时,一般会出现几个常见的问题
- 函数声明整体提升
- 变量声明整体提升
一般js运行有三个步骤,词法分析-->预编译-->解释执行。
而那几个问题的答案就在于预编译。
js原型链
js的原型链也是我们常会接触到的知识,也是在es6中class类出现之前,js实现继承主要方法。
在js中万物皆对象,通过构造函数我们可以创建实例对象,实例对象与构造函数可以通过原型链实现继承。在vue的源码相关中,就无数次通过vue.prototype.xxx挂载方法。
在这里问几个问题
-
什么是原型对象
-
构造函数,实例对象,原型对象三者的关系是什么
-
原型链的最终指向
-
最后问一句,你了解多少种js继承方法,各自有什么优缺点,最完善的又是哪一种
js 作用域
作用域是什么?是一套用来原理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找的规则。
通俗而言,就是你当前的变量?我作为引擎,应该从哪里去寻找。
作用域有全局作用域,函数作用域,以及es6新增的块级作用域。
为了增强大家的理解,在细谈的时候,会加入一些题目。(一直以为,理解作用域的最好方法就是做题)
js this指向
this关键字是js最复杂的机制之一(本观点来源于你不知道的js)。它最主要的作用,就是提供了一种更优雅的方式来隐式传递一个对象的引用。
this引用中,最关键的一句话总结就是,谁来调用,this就指向谁?
当然,箭头函数除外。本部分同样将涉及例子,以及来自于你不知道js上册总结。
js 强制类型转换
动态语言,意味着你定义变量不需要像c语言或者其他语言那样,提前声明语言类型。同样意味着,你可以中途随便改变语言的类型。虽然方便,可是却也有很多的坑。
两个不同类型的值,可以进行比较,比较结果竟然可以是true。
两个不同类型的值,可以相加,结果你完全想象不到。