当前位置:实例文章 » HTML/CSS实例» [文章]js面试题整理

js面试题整理

发布人:shili8 发布时间:2025-01-30 03:13 阅读次数:0

**JS 面试题整理**

### 一、基本概念####1. var、let 和 const 的区别* `var` 是 JavaScript 中最早的变量声明方式,它有函数作用域和全局作用域。
* `let` 和 `const` 是 ES6 引入的新变量声明方式,都是块级作用域。

javascript// varvar a =10;
console.log(a); //10function fn() {
 var b =20;
 console.log(b); //20}

fn();
console.log(b); // ReferenceError: b is not defined// let 和 constlet c =30;
console.log(c); //30if (true) {
 let d =40;
 console.log(d); //40}
console.log(d); // ReferenceError: d is not definedconst e =50;
console.log(e); //50e =60; // TypeError: Assignment to constant variable.


####2. this 的指向* 在全局作用域中,`this` 指向 window 对象。
* 在函数作用域中,`this` 指向函数的调用者。

javascript// 全局作用域console.log(this); // Window { ... }

function fn() {
 console.log(this); // Window { ... }
}

fn();

// 函数作用域const obj = {
 name: '张三',
 sayHello: function () {
 console.log(`Hello, my name is ${this.name}.`);
 },
};

obj.sayHello(); // Hello, my name is 张三.

function fn2() {
 console.log(this); // Window { ... }
}

fn2.call({ name: '李四' }); // Hello, my name is 李四.


####3. call、apply 和 bind 的区别* `call` 方法用于改变函数的 this 指向,并传递参数。
* `apply` 方法与 `call` 类似,但它传递的是一个数组作为参数。
* `bind` 方法用于改变函数的 this 指向,并返回一个新函数。

javascriptfunction fn(a, b) {
 console.log(this.name + ' say hello to ' + a + ' and ' + b);
}

const obj = { name: '张三' };

fn.call(obj, '李四', '王五'); // 张三 say hello to 李四 and 王五fn.apply(obj, ['李四', '王五']); // 张三 say hello to 李四 and 王五const fn2 = fn.bind(obj);
fn2('李四', '王五'); // 张三 say hello to 李四 and 王五


####4. 箭头函数的特点* 箭头函数没有自己的 this 指向。
* 箭头函数不能用作构造函数。

javascriptconst fn = () => {
 console.log(this); // Window { ... }
};

fn();

function Fn() {
 console.log(this); // Window { ... }
}

new Fn();


####5. Promise 的使用* Promise 是 JavaScript 中用于处理异步操作的对象。
* Promise 有三个状态:pending、resolved 和 rejected。

javascriptconst promise = new Promise((resolve, reject) => {
 setTimeout(() => {
 resolve('Hello, World!');
 },2000);
});

promise.then((data) => {
 console.log(data); // Hello, World!
}).catch((error) => {
 console.error(error);
});


####6. async/await 的使用* async/await 是 JavaScript 中用于处理异步操作的语法糖。
* async/await 可以让代码看起来像同步代码一样。

javascriptasync function fn() {
 try {
 const data = await new Promise((resolve, reject) => {
 setTimeout(() => {
 resolve('Hello, World!');
 },2000);
 });
 console.log(data); // Hello, World!
 } catch (error) {
 console.error(error);
 }
}

fn();


####7. Set 和 Map 的使用* Set 是 JavaScript 中用于存储唯一值的集合。
* Map 是 JavaScript 中用于存储键值对的集合。

javascriptconst set = new Set([1,2,3,4,5]);
console.log(set); // Set {1,2,3,4,5 }

set.add(6);
console.log(set); // Set {1,2,3,4,5,6 }

const map = new Map([['a',1], ['b',2]]);
console.log(map); // Map { 'a' =>1, 'b' =>2 }


####8. Proxy 的使用* Proxy 是 JavaScript 中用于代理对象的构造函数。
* Proxy 可以让你在不改变原有代码的情况下修改对象的行为。

javascriptconst target = { name: '张三', age:30 };
const proxy = new Proxy(target, {
 get: (target, property) => {
 console.log(`Getting ${property} from ${target.name}.`);
 return target[property];
 },
});

console.log(proxy.name); // Getting name from 张三.
console.log(proxy.age); // Getting age from 张三.


####9. Reflect 的使用* Reflect 是 JavaScript 中用于操作对象的构造函数。
* Reflect 可以让你在不改变原有代码的情况下修改对象的行为。

javascriptconst target = { name: '张三', age:30 };
const reflect = new Proxy(target, {
 get: (target, property) => {
 console.log(`Getting ${property} from ${target.name}.`);
 return target[property];
 },
});

console.log(reflect.get(target, 'name')); // Getting name from 张三.


####10. WeakMap 和 WeakSet 的使用* WeakMap 是 JavaScript 中用于存储键值对的集合。
* WeakSet 是 JavaScript 中用于存储唯一值的集合。

javascriptconst weakMap = new WeakMap();
weakMap.set({ name: '张三' }, { age:30 });
console.log(weakMap.get({ name: '张三' })); // { age:30 }

const weakSet = new WeakSet();
weakSet.add({ name: '张三', age:30 });
console.log(weakSet.has({ name: '张三', age:30 })); // true


### 二、数组和字符串####1. 数组的方法* `push` 方法用于向数组中添加元素。
* `pop` 方法用于从数组中删除最后一个元素。
* `shift` 方法用于从数组中删除第一个元素。
* `unshift` 方法用于向数组中添加元素到头部。

javascriptconst arr = [1,2,3];
arr.push(4);
console.log(arr); // [1,2,3,4]

arr.pop();
console.log(arr); // [1,2,3]

arr.shift();
console.log(arr); // [2,3]

arr.unshift(1);
console.log(arr); // [1,2,3]


####2. 数组的遍历* `forEach` 方法用于遍历数组中的每个元素。
* `map` 方法用于将数组中的每个元素转换为新值。
* `filter` 方法用于过滤数组中的某些元素。
* `reduce` 方法用于将数组中的所有元素合并成一个值。

javascriptconst arr = [1,2,3];
arr.forEach((element) => {
 console.log(element); //1,2,3});

const newArr = arr.map((element) => {
 return element *2;
});
console.log(newArr); // [2,4,6]

const filteredArr = arr.filter((element) => {
 return element >1;
});
console.log(filteredArr); // [2,3]

const sum = arr.reduce((acc, current) => {
 return acc + current;
},0);
console.log(sum); //6


####3. 字符串的方法* `split` 方法用于将字符串分割成数组。
* `join` 方法用于将数组中的元素连接成字符串。

javascriptconst str = 'hello,world';
const arr = str.split(',');
console.log(arr); // ['hello', 'world']

const newStr = arr.join('-');
console.log(newStr); // hello-world


####4. 正则表达式的方法* `test` 方法用于测试字符串是否匹配某个模式。
* `exec` 方法用于执行正则表达式并返回匹配结果。

javascriptconst str = 'hello,world';
const regex = /hello/;
console.log(regex.test(str)); // trueconst match = regex.exec(str);
console.log(match); // ['hello']


####5. 数组和字符串的其他方法* `indexOf` 方法用于在数组或字符串中

相关标签:js
其他信息

其他资源

Top