因为有些浏览器会默认拦截window.open,当需要函数中打开窗口,可以使用a标签模拟window.open
js有些事件例如resize,mousemove等是会不间断触发的,如果这些事件的回调函数里有操作DOM、复杂算法或者Ajax向服务器发送请求等就会严重影响性能及其资源浪费。为了避免这个问题,我们一般会使用定时器来对函数进行节流。
Proxy可以被认为是Object.defineProperty()的升级版。外界对某个对象的访问,都必须经过这层拦截。因此它是针对整个对象,而不是对象的某个属性,所以也就不需要对keys进行遍历。
关于Object.defineProperty的介绍看这里,今天又看到《数据劫持 OR 数据代理》一文,我就转载收藏记录一下关于Object.defineProperty的问题。
我们常听说vue是用getter与setter实现数据监控的,那么getter与setter到底是什么东西,它与defineProperty是什么关系,平时有哪些用处呢?本文将为大家一一道来。注:Vue.js 3.0不再使用Object.defineProperty而是原生Proxy。
Element.closest()方法用来获取:匹配特定选择器且离当前元素最近的祖先元素(也可以是当前元素本身)。如果匹配不到,则返回null。使用Element.closest()简化事件处理程序中匹配最近的父元素。
async脚本会在下载后立即执行,而不保持顺序。这意味着如果有一个异步React bundle包和异步app bundle应用程序包,并且React bundle包更大,则app bundle应用程序将比React更早下载并执行(发生js依赖错误并中断执行)。与async不同,defer只有在下载完所有脚本后才能以正确的顺序执行。因此,在优化大型复杂应用程序时,defer延迟可能比async异步更安全。
window.requestAnimationFrame() 方法告诉浏览器希望执行动画并请求浏览器调用指定的函数在下一次重绘之前更新动画。它采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果。requestAnimationFrame还有一个很好用的polyfill库raf推荐给大家。
数组的扁平化,就是将一个嵌套多层的Array数组(嵌套可以是任何层数)转换为只有一层的数组。
刚开始使用jQuery可以帮助我们免受浏览器不兼容的烦恼,但现代的浏览器更新发展超乎我们的想象,所以有些情况下根本不需要引入一个jQuery库文件。一味的使用jQuery,会让你忘了或失去很多原生Javascript的魅力。