英文 | https://javascript.plainenglish.io/50-questions-to-master-the-javascript-coding-interview-639d2ac12630
翻译 | web前端开发公众号
答案是第二种情况(打印出queueMicroTask更好),因为来自queueMicroTask的任务在调用栈为空之后且在调用事件循环之前被调用,对于setTimeout而言,任务是eventQeue的一部分。
答案是输出为10,因为将对象传递给函数时的对象相似,仅传递其值,而不传递对内存位置的实际引用。这就是为什么更改仅影响函数范围内的参数的原因。
在这种情况下,由于我们两次定义了相同的变量,因此,会在控制台上引发错误。
但是,如果我们使用var定义相同的变量,则控制台将返回50 。同样,在使用const定义变量时,我们将得到相同的错误。
在Line1中,我们有两个相互比较的对象,并且它们都是唯一的,因此它将在控制台上记录为False。
在Line2中,我们使用===运算符来检查两个字符串基元而不是字符串对象,因此我们得到True。
与之前的问题类似,我们比较了两个唯一的对象。在这种情况下,只有一个唯一的对象,它具有两个常量x和y,它们指向内存中的唯一对象,并在控制台上返回True。
在JavaScript中,我们处理的大多数事物都是对象,类似地,数组只是JavaScript中的特殊对象,它们具有其他对象所没有的属性。
答案,是B,因为异步函数在JavaScript中返回Promises 。
答案是False,await关键字仅阻止执行包含await关键字的特定函数内的代码。
JavaScript中的函数是对象,typeof name将输出function。
以下语法是有效的,因为我们正在将异步函数的返回值传递给callback。
typeof返回类型, instanceof返回布尔值。
instanceof需要TypeScript,而typeof则不需要。
typeof在右侧使用变量名称, instanceof在左侧和右侧使用值,而不是。
答案是B,因为它们都不要求TypeScript,并且两者都不是JavaScript固有的。
答案是C,当我们需要等待执行直到所有的都被解决时,Promise.all()会非常有用。
13、控制台输出是什么,为什么?
在这种情况下,我们有&运算符,它与&&运算符完全不同。&是按位运算符,当我们比较11和3时,它将与1011和0011的二进制相同。结果,只有都为1的位保持为1,返回的输出为0011,它是3的二进制表示形式, 因此3记录在控制台上。
答案是null,因为默认值的对象。[[原型]为空,它会返回undefined在控制台上。该对象位于原型链的顶部,当浏览器查找访问属性的值时,它将遍历原型链,直到找到该值或直到不再遍历所有原型为止。
当左侧操作数为null或未定义时,它将返回右侧操作数。
不,getElementsByTagName是一个Web API函数,就像普通的JS函数一样可用。
例如,当我们必须侦听页面加载期间可能不存在的事件时,可以使用事件委托,并在父元素上提供事件处理程序并查看event.target。但是,如今,现代的前端框架和库使此操作变得不必要了。
答案是E。
答案是A。
不可以,因为字符串在JavaScript中是不可变的,指向字符串的变量可以分配给另一个字符串。
不可以,嵌套是一种用于限制catch语句范围的控制结构。用简单的话来说,嵌套的catch仅捕获其作用域及其以下范围内的故障,而不捕获嵌套范围之外的链中较高的错误。
即使mymap.get({})是有效的语法,它也会在控制台上返回undefined。因为set和get中的Object是内存中两个不同的空对象,因此getter不会返回值。
控制台输出将为Map {'a'=> 2,'b'=> 2,'c'=> 1},这意味着第二个映射中的所有相同键将覆盖第一个映射中的键。
是的,可以,obj.prop1.prop2和obj ['prop1'] ['prop2']是等效的。
答案是B,可枚举属性。
控制台输出将为'Mohit',因为内部函数有权访问在外部作用域中声明的变量。
该函数的名称,一个指向该函数的范围内变量,并使用arguments.callee。
不,JavaScript本身不支持重载,但TypeScript可以。但是,可以在JavaScript中通过在未将所有可能的参数都传递给函数时返回不同的输出来执行重载。
它不会返回任何内容,并且如果你需要从循环中返回值,则永远不要使用forEach循环。
不,RegExp具有许多属性,例如.flags和.global。
控制台输出将为10和5,因为该函数在Promise中没有异步的内容,并且Promise同步解析。
requestAnimationFrame()。
大多数时候,我们处理具有默认命名约定的简单导入,除此之外,有时我们不得不处理名称,因为有的名称较长。在这种情况下,使用别名是有帮助的。
子例程是主例程中遇到的函数,然后将其保存到对象并存储以供以后使用。例如,执行范围(变量,参数等)与子例程一起存储。
是的,这些事件处理程序是Web API的一部分。
new Object()&Object.create()和文字符号,其中我们定义了像this-(const obj = {a:2})这样的对象。
一个被分配到一个对象,b被分配给一个使用该扩展运算符,它意味着一个和b在技术上是相同的。
c只是一个空对象。
使用Object.assign()中,c现在被指定到一个,并且后来在这之后,我们改变的值X在一个作为2。
控制台输出将为2,1,1。
它防止添加新属性。
它可以防止更改对象的原型。
它防止更改属性的值。
它防止更改属性的可写性。
event.currentTarget随着事件起泡而变化,event.target保持不变。
按字符值从最小到最大。
当两个线程或异步进程必须完成自身操作以更新某些共享状态时,否则将出现错误或不良结果。
使JavaScript更加面向对象只是语法上,即使使用class关键字,JavaScript仍会使用原型继承。
否,任务按照先进先出的顺序执行。
阴影DOM API提供了一种隐藏的单独的DOM,附加到不是通过正常的访问元件JS DOM操作API。它提供Web组件的封装。
Element.attachShadow()。
它返回h,因为数组在JavaScript中是从零开始的,因此arr [2] [1]将可以访问外部数组的第3个元素和内部数组的第2个元素,从而得出值“ h”。
它们都将值对存储在Web浏览器中,但是sessionStorage在浏览器关闭后会删除存储的值。
是的,例如,在if语句中,需要在评估中返回一个布尔值,例如if(a!== b)。
map()和filter()。