Object.create 和 Object.assign
摘要:Object.assign(target, ...source) 1.Object.assign方法只会拷贝源对象自身(不包括原型)的并且可枚举的属性到目标对象,使用源对象的get和目标对象的set,所以会调用相关getter和setter。 通俗点说:源对象的属性值需要配置可枚举,enumerab
阅读全文
WeakMap与Map,使用WeakMap实现深拷贝循环引用问题
摘要:1.Map可以使用任意类型的key值,不限字符串,对象等。 2.WeakMap只能使用对象作为key值,是弱引用,当从WeakMap中移除时,会自动垃圾回收 3.Object只能用基本类型作为key值。 下面使用WeakMap解决深拷贝中对象循环引用问题 function deepClone (or
阅读全文
Promise.resolve(x)中x有几种情况
摘要:ps:下面参数说的是Promise.resolve(x)中的x 一共四种情况: 1.如果参数是Promise实例本身,则抛出错误 2.如果参数是一个promise对象,则then函数的执行取决于这个参数的状态,如果参数也调用了resolve(y),其中y也是一个promise对象then函数的执行取
阅读全文
vue.$set实现原理
摘要:上源码: export function set (target: Array<any> | Object, key: any, val: any): any { if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isP
阅读全文
防抖、节流函数
摘要:一、防抖 原理:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。 场景: 1.按钮提交场景,防止多次提交按钮,只执行最后一次的提交 2.搜索框联想场景,防止联想发送请求,只发送最后一次输入 简易版: function debounce (func, wait) { let time
阅读全文
vue如何监听数组的变化
摘要:export function def (obj: Object, key: string, val: any, enumerable?: boolean) { Object.defineProperty(obj, key, { value: val, enumerable: !!enumerabl
阅读全文
vue.$nextTick实现原理
摘要:源码: const callbacks = [] let pending = false function flushCallbacks () { pending = false const copies = callbacks.slice(0) callbacks.length = 0 for (
阅读全文
vue3双向数据绑定原理_demo
摘要:<!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=
阅读全文
中文数组转为数字
摘要:const testPair = [ [0, '零'], [1, '一'], [2, '二'], [3, '三'], [10, '一十'], [11, '十一'] ] function transform (str) { const numChar = { '零': 0, '一': 1, '二':
阅读全文
props&attrs provide inject
摘要:defineComponent({ props: {// 1 } setup (props, {attrs, emit}) { } }) 一,组件传值: 父传子: 1.如果没有在定义的props中声明接收父组件的值,那在attrs中可以获取父组件传递给子组件的值 如果在定义的props中声明接收父组
阅读全文
vue2和vue3比较
摘要:一.vue3新特性: 1.数据响应重新实现(ES6的proxy代替Es5的Object.defineProperty) 2.源码使用ts重写,更好的类型推导 3.虚拟DOM新算法(更快,更小) 4.提供了composition api,为更好的逻辑复用与代码组织 5.自定义渲染器(app、小程序、游
阅读全文
for...in和Object.keys()区别
摘要:区别: for in 用来枚举对象的属性,某些情况下,可能按照随机顺序遍历数组元素 object.keys() 可以返回对象属性为元素的数组,数组中属性名顺序和for in比那里返回顺序一样 for in循环会枚举对象原型上的可枚举属性,Object.keys 不会
阅读全文
for...of 和 for...in 是否可以直接遍历对象,有什么解决方案
摘要:答案: for...of不能直接遍历对象,for in可以直接遍历对象 原因: for...of需要实现iterator接口,对象没有实现iterator接口 解决: const obj = {a: 1, b: 2} for (let item of Object.keys(obj)) a b fo
阅读全文
什么是js事件,冒泡机制,事件捕获,默认行为
摘要:js事件: javascript使我们能够有能力创建动态页面,事件就是可以被js侦测到的行为,网页中每个元素都可以产生某些触发js函数的事件。 例如我们可以在用户点击某个按钮时产生一个click事件来触发某个函数。 事件冒泡: 就是事件从目标开始,网上冒泡直到页面的最上一级标签,也就是当一个元素被触
阅读全文
cookie和session和localStorage的区别
摘要:这三个都是保存在浏览器端,而且都是同源的。 Session仅在当前浏览器窗口关闭有效,不能持久保存 Localstorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据 Cookie只在设置的cookie过期时间之前有效。 Cookie能在浏览器和服务器之间来回传递,其他两个不能 但是se
阅读全文
IE6的bug
摘要:1.IE6的最小高度 为元素添加overflow:hidden; 2.li最后一个子元素浮动后li间产生3px外边距为li添加 vertical-align:top; 3.img的下行空间bug 如果是单个图片的话为img添加display:block 如果是多个图片的话就为每个img添加verti
阅读全文