构造新对象及其原型时使用了这个模式。
Q20:判断一个给定的字符串是否是同构的
如果两个字符串是同构的,那么字符串A中所有出现的字符都可以用另一个字符替换,以便获得字符串B,而且必须保留字符的顺序。字符串A中的每个字符必须与字符串B的每个字符一对一对应。
Q21:“Transpiling”是什么意思?
对于语言中新加入的语法,无法进行polyfill。因此,更好的办法是使用一种工具,可以将较新代码转换为较旧的等效代码。这个过程通常称为转换(transpiling),就是transforming + compiling的意思。
通常,你会将转换器(transpiler)加入到构建过程中,类似于linter或minifier。现在有很多很棒的转换器可选择:
Q22:“this”关键字的原理是什么?请提供一些代码示例。
在java script中,this是指正在执行的函数的“所有者”,或者更确切地说,指将当前函数作为方法的对象。
Q23:如何向Array对象添加自定义方法,让下面的代码可以运行?
java script不是基于类的,但它是基于原型的语言。这意味着每个对象都链接到另一个对象(也就是对象的原型),并继承原型对象的方法。你可以跟踪每个对象的原型链,直到到达没有原型的null对象。我们需要通过修改Array原型来向全局Array对象添加方法。
Q24:什么是java script中的提升操作?
提升(hoisting)是java script解释器将所有变量和函数声明移动到当前作用域顶部的操作。有两种类型的提升:
无论var(或函数声明)出现在作用域的什么地方,它都属于整个作用域,并且可以在该作用域内的任何地方访问它。
Q25:以下代码输出的结果是什么?
这段代码的输出是false,这是由浮点数内部表示导致的。0.1 + 0.2并不刚好等于0.3,实际结果是0.30000000000000004。解决这个问题的一个办法是在对小数进行算术运算时对结果进行舍入。
Q26:请描述一下Revealing Module Pattern设计模式
暴露模块模式(Revealing Module Pattern)是模块模式的一个变体,目的是维护封装性并暴露在对象中返回的某些变量和方法。如下所示:
它的一个明显的缺点是无法引用私有方法。
英文原文:https://www.fullstack.cafe/blog/top-26-java script-interview-questions-and-answers-in-2019