防抖(debounce)和节流(throttle)
js中的垃圾回收机制(Garbage Collection)和内存泄漏(Memory Leak)
js对象判空的几种方法

js对象判空的几种方法

js无法直接比较一个对象是否为空( obj === {} 永远为 false ),原因是js在对比两者时是比对的两者的内存地址,而 {} 放在js引擎新分配的内存地址中,故而两者永远不相等。

阅读更多
laydate日期格式不合法
详解js中的get/set

详解js中的get/set

js对象有两种属性:

  • 数据属性:就是对象中的普通成员。
  • 存取属性:一组get/set函数,读取对象属性时调用get(不带参数,可以return),设置对象属性时调用set(set中return无效)。

如果对象内只声明了get,则get/set属性值只可读。
如果对象内只声明了set,则get/set属性值只可写且值永远为 undefined

阅读更多
js变量和文件命名
js判断两个对象是否相同

js判断两个对象是否相同

js判断两个对象是否相同(两个对象拥有相同的key和value就视为相同)。

此方法可以兼容key顺序不一致的情况。

阅读更多
事件循环(EventLoop)

事件循环(EventLoop)

JavaScript是单线程语言,JavaScript中的任务分为同步任务(sync task)和异步任务(async task)。遇到执行函数会将其放入调用栈(先进后出)中,遇到setTimeout/setInterval等异步任务时,会把它放入到消息队列中,等主线程的任务执行完成以后,再回过头执行消息队列中的异步任务,如果异步任务中仍然有异步任务,会继续放入消息队列,以此类推,便形成了一个事件循环。

同步任务:在主线程上排队。
异步任务:在任务队列中排队,等待通知进入主线程执行。

阅读更多
变量提升(hoisting)

变量提升(hoisting)

varfunction 的声明毫无疑问是会被提升到其所在的全局作用域顶部或者函数作用域顶部的。
故而,对于 varfunction 可以先使用后声明。

但是对于 letconst ,各种文章教程都说不会被js提升。
但是我从暂时性死区(TDZ)中发现其实他们俩也是存在变量提升的,只是他们被提升的时候不会在js内部被初始化。

阅读更多
import和export