web前端 -- JavaScrip面试题集

js 数据类型

js中有5种基本类型:Number String undefined Null Boolean 和一种引用类型 Object,目前细分如下:

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)、
日期(Date)、正则(RegExp)。
Symbol由ES6规范引入的一项新特性,目前在react里面用的比较多

/**
 * @param  {any} description 描述信息。可以是任何可以被转型成字符串的值,如:字符串、数字、对象、数组等
 */
function Symbol(description?: any): symbol

js 判断数据类型方法

具体问题参考我的文章web前端 -- js 判断数据类型方法。

js 字符串与数组相互转化

1、 split() 方法把字符串转换为数组。
2、使用 join() 方法可以把数组转换为字符串。

js 防抖和节流

1、防抖函数
理解:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
思路:每次触发事件时都取消之前的延时调用方法
2、节流函数
理解:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率
解释:每次触发事件时都判断当前是否有等待执行的延时函数
这里之后会补充下具体实现

浅拷贝和深拷贝

1、浅拷贝:拷贝只是地址。

var a = 1;
var b = a;
a = 3;
console.log('结果1 ==',a); // 结果1 == 3
console.log('结果2 ==',b); // 结果2 == 1

通俗解释:通过b=a 把a的地址赋值给b,随后a发生了改变,但是b还是自己初始的值,没有发生变化,这里只是地址的拷贝是浅拷贝。

// Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
const obj1 = {a:{b:1}};
const obj2 = Object.assign({},obj1);
obj1.a.b = 2;
console.log('结果==',obj2.a.b)  // 结果== 2

2、深拷贝:拷贝不是地址。

var obj = {people: qianqian}       
var obj2 = JSON.parse(JSON.stringify(obj))

copy一个地址没乱用,改了地址里面的东西原来的还是会变。

事件循环 EventLoop

请参考《什么是 Event Loop?》

设计模式

设计模式都是面向对象的,我用过比较了解有以下几种:
1、单例模式:保证一个类仅有一个一个实例,并提供一个访问它的全局访问点。
2、观察者模式:又称发布订阅者模式,经典案例:事件监听,一个元素同时监听多个同类型事件,元素对象即为发布者,每一个事件处理函数即为订阅者。
3、代理模式:为其他对象提供一种代理以控制对这个对象的访问,为了不暴露执行对象的部分代码。
4、工厂模式:做一个对象创建的封装,并将创建的对象return出去。通俗解释就是是函数式声明,把创建类的逻辑都封装到函数内部。

你可能感兴趣的:(web前端 -- JavaScrip面试题集)