📜  JavaScript面试问题(1)

📅  最后修改于: 2023-12-03 15:16:18.689000             🧑  作者: Mango

JavaScript 面试问题

本文旨在介绍面试中可能会考到的 JavaScript 知识点,包括基础语法、面向对象、异步编程等方面。

基础语法
1. JavaScript 变量声明的关键词有哪些?

JavaScript 变量声明有三种关键字:varletconst

其中,var 声明的变量具有函数作用域,letconst 声明的变量具有块级作用域。

2. JavaScript 中如何定义全局变量?

在全局作用域中,使用 var 声明的变量会成为全局变量。

3. JavaScript 有哪些基本数据类型?

JavaScript 有六种基本数据类型:numberstringbooleannullundefinedsymbol

4. JavaScript 中如何判断一个变量的类型?

可以使用 typeof 运算符判断一个变量的类型。它返回一个字符串,表示该变量的数据类型。

例如:

typeof 123; // "number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof null; // "object"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"

需要注意的是,typeof null 返回的是 "object",这是 JavaScript 的一个历史遗留问题。

5. JavaScript 中如何进行类型转换?

JavaScript 中有两种类型转换:隐式类型转换和显式类型转换。

隐式类型转换

JavaScript 中的隐式类型转换是自动发生的。例如,当一个字符串和一个数字相加时,会自动将字符串转换为数字。

var a = "123";
var b = 456;
console.log(a + b); // "123456"

还有一些其他的隐式类型转换情况,需要注意。

显式类型转换

显式类型转换是通过一些函数实现的。例如,可以通过 Number() 函数将一个变量转换为数字类型。

var a = "123";
console.log(Number(a)); // 123

常用的类型转换函数包括:

  • Number(): 转换成数字类型。
  • String(): 转换成字符串类型。
  • Boolean(): 转换成布尔类型。
面向对象
1. JavaScript 中如何创建对象?

JavaScript 中可以使用对象字面量或者构造函数的方式创建对象。

对象字面量

var obj = {
  name: "张三",
  age: 18,
  sayHello: function() {
    console.log("大家好,我是" + this.name + ",今年" + this.age + "岁。");
  }
};

构造函数

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log("大家好,我是" + this.name + ",今年" + this.age + "岁。");
  }
}

var person = new Person("张三", 18);
2. JavaScript 的原型是什么?

JavaScript 中,每个对象都有一个原型对象。原型对象可以理解为对象的模板,它包含了对象所拥有的属性和方法。

当访问一个对象的属性或者方法时,如果该对象本身没有该属性或者方法,那么 JavaScript 就会去它的原型对象中查找。

3. JavaScript 的继承是怎么实现的?

JavaScript 中的继承是基于原型对象的。子类可以通过继承父类的原型对象,来获得父类的属性和方法。

实现继承的方式包括:

  • 原型链继承
  • 构造函数继承
  • 组合继承
  • 寄生组合继承
4. JavaScript 中的对象有哪些属性和方法?

JavaScript 中的对象有很多属性和方法。一些常用的属性和方法包括:

  • constructor: 返回对创建此对象的函数的引用。
  • hasOwnProperty(): 返回一个布尔值,表示对象是否具有指定属性。
  • isPrototypeOf(): 返回一个布尔值,表示对象是否是另一个对象的原型。
  • propertyIsEnumerable(): 返回一个布尔值,表示指定属性是否可枚举。
  • toLocaleString(): 返回对象的本地化字符串表示。
  • toString(): 返回对象的字符串表示。
  • valueOf(): 返回对象的原始值。
异步编程
1. JavaScript 中的异步编程是怎么实现的?

JavaScript 中的异步编程是通过回调函数实现的。当需要进行异步操作时,JavaScript 会将该操作的回调函数放入事件队列中,等待事件循环系统执行。

例如,setTimeout() 函数可以用来模拟异步操作:

console.log("开始");
setTimeout(function() {
  console.log("异步操作完成");
}, 1000);
console.log("结束");
2. JavaScript 中的 Promise 是什么?

Promise 是一种处理异步操作的机制。你可以把 Promise 看作一个代表异步操作的对象,它可以有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败)。

Promise 对象有两个主要方法:then() 和 catch()。通过 then() 方法可以指定当异步操作完成后要执行的代码;通过 catch() 方法可以指定当异步操作失败时要执行的代码。

例如:

var promise = new Promise(function(resolve, reject) {
  setTimeout(function() {
    var result = Math.random();
    if (result > 0.5) {
      resolve(result);
    } else {
      reject("操作失败!");
    }
  }, 1000);
});

promise
  .then(function(result) {
    console.log("操作成功,结果为:" + result);
  })
  .catch(function(error) {
    console.log("操作失败,原因为:" + error);
  });
3. JavaScript 中的 async/await 是什么?

async/await 是 ES2017(ES8)中新增的异步编程语法。它可以让异步代码看起来像同步代码,更易于理解和维护。

例如:

async function fetchData() {
  try {
    var result = await $.ajax("http://example.com/data.json");
    console.log("数据为:" + result);
  } catch (error) {
    console.log("获取数据失败,原因为:" + error);
  }
}

fetchData();

其中,async 标记函数为异步函数,await 可以暂停异步函数的执行,等待 Promise 对象 resolve 后继续执行。

总结

本文介绍了 JavaScript 中的基础语法、面向对象和异步编程等方面的知识点。希望这些知识点能够帮助您在面试中更好地展示自己的技能。