1. 什么是工厂函数
工厂函数是一个返回对象的类。
实现方式:在函数内部new一个对象,给对象添加属性后返回。
function factory(name, age, job) {
let obj = new Object();
obj.name = name;
obj.age = age;
obj.job = job;
obj.sayName = function() {
alert(this.name);
}
return obj;
}
以上就是一个工厂函数。工厂函数就像一个模具,生产出来的对象都是一样的。
2. 发布订阅模式是如何实现的
3. 什么是跨域?如何解决跨域问题?
4. js的数据类型有哪些?基本数据类型和引用数据类型有什么区别?
Javascript有6种简单数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number、String、Symbol(ES6新增)和1种复杂数据类型:Object。
基本数据类型和引用数据类型的区别:
基本数据类型存放在栈内存中,保存的是值,变量之间赋值之后是独立的,互不影响;
引用对象类型的实际值存放于堆内存中,栈内存中存放的只是一个内存地址的引用(即指针),变量之间赋值,交换的是内存地址,两个变量指向的是同一个对象,无论改变哪个都会影响到另一个。
5. 判断数据类型的方法有哪些?返回值是什么?
6. 需要用到多个ajax请求的返回数据,该怎么处理?
7. 如何实现深拷贝?
8. map和forEach的区别?
forEach改变原数组,不会返回执行结果;
map不会改变原数组,创建一个新数组并返回
9. ES6 新增的特性
10. 箭头函数和普通函数的区别?
参考:箭头函数与普通函数的区别
11. event loop
12. Object常用的方法有哪些?
13. 循环数组的方法有哪些?
14. 字符串去重有哪些方法?
15. getQuery()获取url参数
16. Promise实现delay函数
function delay(time) {
return new Promise((resolve, rejected) => {
setTimeout(function() {
resolve();
}, time)
}).then(() => {
// 执行的内容
})
}
17. 自定义事件
18. 宏任务和微任务
19. post请求如何跨域?
20. 防抖和节流的作用是什么?有什么区别?
21. promise、async 和 await
22. let 和 var 同时声明一个变量,变量的值是多少?
23. typeof null返回什么
返回’object’,因为在内存中,判断为object的条件是二进制表示前三位为0,而null的二进制表示全为0;
24. 基本数据类型的值存放在哪里?引用类型的值存放在哪里?
基本数据类型的值存放在栈内存中,引用数据类型的值存放在堆内存中,栈内存中存放的是堆内存的引用地址。
25. 箭头函数可以作为构造函数吗?
26. 箭头函数中怎么使用arguments?
27. 数组和类数组的区别是什么?哪些是类数组?如何将类数组转换为数组?
类数组的特点:
- 具有length属性,其他属性均为非负整数的字符串
- 不具有数组所具有的方法
- 原型是一个对象(Object),而数组的原型是Array
类数组例子:
- arguments
- js 获取的DOM节点,如:document.getElementsByClassName();
类数组转换为数组的方法:
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5
// 方法一
let arr1 = Array.prototype.slice.call(arrayLike);
// 方法二
let arr2 = [].slice.call(arrayLike);
// 方法三
let arr3 = Array.from(arrayLike);
输出如图:
28. window.opener有哪些用途?
window.opener() 返回打开通过 window.open() 方法当前窗口的那个窗口的引用。如果当前页面不是由其他窗口打开的,则返回 null。
在实际应用中,子页面可以通过 window.opener() 调用父页面的方法并传参。
29. history的state有哪些用途?
history.state是一个只读属性,返回一个表示历史堆栈顶部的状态的值。这是一种可以不必等待popstate 事件而查看状态的方式。