📅  最后修改于: 2023-12-03 15:16:18.689000             🧑  作者: Mango
本文旨在介绍面试中可能会考到的 JavaScript 知识点,包括基础语法、面向对象、异步编程等方面。
JavaScript 变量声明有三种关键字:var
、let
、const
。
其中,var
声明的变量具有函数作用域,let
和 const
声明的变量具有块级作用域。
在全局作用域中,使用 var
声明的变量会成为全局变量。
JavaScript 有六种基本数据类型:number
、string
、boolean
、null
、undefined
、symbol
。
可以使用 typeof
运算符判断一个变量的类型。它返回一个字符串,表示该变量的数据类型。
例如:
typeof 123; // "number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof null; // "object"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
需要注意的是,typeof null
返回的是 "object"
,这是 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()
: 转换成布尔类型。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);
JavaScript 中,每个对象都有一个原型对象。原型对象可以理解为对象的模板,它包含了对象所拥有的属性和方法。
当访问一个对象的属性或者方法时,如果该对象本身没有该属性或者方法,那么 JavaScript 就会去它的原型对象中查找。
JavaScript 中的继承是基于原型对象的。子类可以通过继承父类的原型对象,来获得父类的属性和方法。
实现继承的方式包括:
JavaScript 中的对象有很多属性和方法。一些常用的属性和方法包括:
constructor
: 返回对创建此对象的函数的引用。hasOwnProperty()
: 返回一个布尔值,表示对象是否具有指定属性。isPrototypeOf()
: 返回一个布尔值,表示对象是否是另一个对象的原型。propertyIsEnumerable()
: 返回一个布尔值,表示指定属性是否可枚举。toLocaleString()
: 返回对象的本地化字符串表示。toString()
: 返回对象的字符串表示。valueOf()
: 返回对象的原始值。JavaScript 中的异步编程是通过回调函数实现的。当需要进行异步操作时,JavaScript 会将该操作的回调函数放入事件队列中,等待事件循环系统执行。
例如,setTimeout() 函数可以用来模拟异步操作:
console.log("开始");
setTimeout(function() {
console.log("异步操作完成");
}, 1000);
console.log("结束");
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);
});
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 中的基础语法、面向对象和异步编程等方面的知识点。希望这些知识点能够帮助您在面试中更好地展示自己的技能。