动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

精选JavaScript面试题附答案解析

04-28 17:06 742浏览
举报 T字号
  • 大字
  • 中字
  • 小字

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

let greeting;
greetign = {}; // Typo!
console.log(greetign);

A: {}

B: ReferenceError: greetign is not defined

C: undefined

答案: A

控制台会输出空对象,因为我们刚刚在全局对象上创建了一个空对象! 当我们错误地将greeting输入为greetign时,JS解释器实际上在浏览器中将其视为global.greetign = {}(或window.greetign = {})。

为了避免这种情况,我们可以使用“use strict”。 这可以确保在将变量赋值之前必须声明变量。

2. 当我们这样做时会发生什么?

function bark() {
  console.log("Woof!");
}

bark.animal = "dog";

A: Nothing, this is totally fine!

B: SyntaxError. You cannot add properties to a function this way.

C: undefined

D: ReferenceError

答案: A

这在JavaScript中是可能的,因为函数也是对象!(原始类型之外的所有东西都是对象)

函数是一种特殊类型的对象。您自己编写的代码并不是实际的函数。 该函数是具有属性的对象,此属性是可调用的。

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

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

const member = new Person("Lydia", "Hallie");
Person.getFullName = () => this.firstName + this.lastName;

console.log(member.getFullName());

A: TypeError

B: SyntaxError

C: Lydia Hallie

D: undefined undefined

答案: A

你不能像使用常规对象那样向构造函数添加属性。 如果要一次向所有对象添加功能,则必须使用原型。 所以在这种情况下应该这样写:

Person.prototype.getFullName = function () {
  return `${this.firstName} ${this.lastName}`;
}

这样会使member.getFullName()是可用的,为什么样做是对的? 假设我们将此方法添加到构造函数本身。 也许不是每个Person实例都需要这种方法。这会浪费大量内存空间,因为它们仍然具有该属性,这占用了每个实例的内存空间。 相反,如果我们只将它添加到原型中,我们只需将它放在内存中的一个位置,但它们都可以访问它!

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

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

const lydia = new Person("Lydia", "Hallie");
const sarah = Person("Sarah", "Smith");

console.log(lydia);
console.log(sarah);

A: Person {firstName: "Lydia", lastName: "Hallie"} and undefined

B: Person {firstName: "Lydia", lastName: "Hallie"} and Person {firstName: "Sarah", lastName: "Smith"}

C: Person {firstName: "Lydia", lastName: "Hallie"} and {}

D:Person {firstName: "Lydia", lastName: "Hallie"} and ReferenceError

答案: A

对于sarah,我们没有使用new关键字。 使用new时,它指的是我们创建的新空对象。 但是,如果你不添加new它指的是全局对象!

我们指定了this.firstName等于'Sarah和this.lastName等于Smith。 我们实际做的是定义global.firstName ='Sarah'和global.lastName ='Smith。 sarah本身的返回值是undefined。

5. 事件传播的三个阶段是什么??

A: 目标 > 捕获 > 冒泡

B: 冒泡 > 目标 > 捕获

C: 目标 > 冒泡 > 捕获

D: 捕获 > 目标 > 冒泡

答案: D

在捕获阶段,事件通过父元素向下传递到目标元素。 然后它到达目标元素,冒泡开始。

6. 所有对象都有原型.

A: 对

B: 错误

答案: B

除基础对象外,所有对象都有原型。 基础对象可以访问某些方法和属性,例如.toString。 这就是您可以使用内置JavaScript方法的原因! 所有这些方法都可以在原型上找到。 虽然JavaScript无法直接在您的对象上找到它,但它会沿着原型链向下寻找并在那里找到它,这使您可以访问它。

译者注:基础对象指原型链终点的对象。基础对象的原型是null。

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

function sum(a, b) {
  return a + b;
}

sum(1, "2");

A: NaN

B: TypeError

C: "12"

D: 3

答案: C

JavaScript是一种动态类型语言:我们没有指定某些变量的类型。 在您不知情的情况下,值可以自动转换为另一种类型,称为隐式类型转换。 强制从一种类型转换为另一种类型。

在此示例中,JavaScript将数字1转换为字符串,以使函数有意义并返回值。 在让数字类型(1)和字符串类型('2')相加时,该数字被视为字符串。 我们可以连接像“Hello”+“World”这样的字符串,所以这里发生的是“1”+“2”返回“12”。

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

let number = 0;
console.log(number++);
console.log(++number);
console.log(number);

A: 1 1 2

B: 1 2 2

C: 0 2 2

D: 0 1 2

答案: C

后缀一元运算符++:

  • 返回值(返回0)
  • 增加值(数字现在是1)

前缀一元运算符++:

  • 增加值(数字现在是2)
  • 返回值(返回2)

所以返回0 2 2。

上面的JavaScript面试题你用了多长时间完成呢,我们已经给出了正确答案和解析,我们在做完题之后要学会检查自己错误的地方,加以改正,然后举一反三,避免后面出现类似的错误。如果这些题目都难不倒你,还可以去动力节点在线网站上,挑战更多的精彩题目!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵279
程序员代码小兵279

75篇文章贡献270037字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

JavaWeb的3大组件

代码小兵49806-11 15:28

全面解析Cookie技术

代码小兵49806-11 15:51

浅谈JavaWeb架构演变

代码小兵49806-11 16:22

探讨Web开发中的Session存储与管理

代码小兵51603-29 17:28

JavaScript基础知识

 暴风城-小飞04-06 20:49

发评论

举报

0/150

取消