送你43道JS面试题(收藏)(8)

27. 下面代码的输出是什么?

for (let i = 1; i < 5; i++) {
 if (i === 3) continue;
 console.log(i);
}

A: 1 2

B: 1 2 3

C: 1 2 4

D: 1 3 4

答案: C

如果某个条件返回true,则continue语句跳过迭代。

28. 下面代码的输出是什么?

String.prototype.giveLydiaPizza = () => {
 return "Just give Lydia pizza already!";
};

const name = "Lydia";

name.giveLydiaPizza();

A: "Just give Lydia pizza already!"

B: TypeError: not a function

C: SyntaxError

D: undefined

答案: A

String是一个内置的构造函数,我们可以为它添加属性。 我刚给它的原型添加了一个方法。 原始类型的字符串自动转换为字符串对象,由字符串原型函数生成。 因此,所有字符串(字符串对象)都可以访问该方法!

译者注:

当使用基本类型的字符串调用giveLydiaPizza时,实际上发生了下面的过程:

创建一个String的包装类型实例

在实例上调用substring方法

销毁实例

29. 下面代码的输出是什么?

const a = {};
const b = { key: "b" };
const c = { key: "c" };

a[b] = 123;
a[c] = 456;

console.log(a[b]);

A: 123

B: 456

C: undefined

D: ReferenceError

答案: B

对象键自动转换为字符串。我们试图将一个对象设置为对象a的键,其值为123。

但是,当对象自动转换为字符串化时,它变成了[Object object]。 所以我们在这里说的是a["Object object"] = 123。 然后,我们可以尝试再次做同样的事情。 c对象同样会发生隐式类型转换。那么,a["Object object"] = 456。

然后,我们打印a[b],它实际上是a["Object object"]。 我们将其设置为456,因此返回456。

30. 下面代码的输出是什么?

const foo = () => console.log("First");
const bar = () => setTimeout(() => console.log("Second"));
const baz = () => console.log("Third");

bar();
foo();
baz();

A: First Second Third

B: First Third Second

C: Second First Third

D: Second Third First

答案: B

我们有一个setTimeout函数并首先调用它。 然而却最后打印了它。

这是因为在浏览器中,我们不只有运行时引擎,我们还有一个叫做WebAPI的东西。WebAPI为我们提供了setTimeout函数,例如DOM。

将callback推送到WebAPI后,setTimeout函数本身(但不是回调!)从堆栈中弹出。

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/97.html