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