Open Silencer-1984 opened 3 years ago
虽然很无语,但是还是记录下来吧
1.最常见的思路,for...in... 遍历属性,为真则为“非空数组”;否则为“空数组”
for (var i in obj) { // 如果不为空,则会执行到这一步,返回true
return true
}
return false // 如果为空,返回false
2.通过 JSON 自带的 stringify() 方法来判断:
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
if (JSON.stringify(data) === '{}') {
return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true
3.ES6 新增的方法 Object.keys():
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。
如果我们的对象为空,他会返回一个空数组,如下:
if (Object.keys(object).length === 0) {
return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true
for await of 用于异步迭代。约等于promise.all.
for更快因为forEach每一次循坏都会创建新的函数,而for只创建一次函数。
长期更新
冒泡和捕获
DOM 事件标准描述了事件传播的 3 个阶段:
冒泡
当一个事件发生在一个元素上,它会首先运行在该元素上的处理程序,然后运行其父元素上的处理程序,然后一直向上到其他祖先上的处理程序
大部分事件都会冒泡。focus、bulr不会。冒泡用
event.stopPropagation()
阻止。event.stopPropagation()
停止向上移动,但是当前元素上的其他处理程序都会继续运行。阻止冒泡严格上是阻止继续传播冒泡。 有一个event.stopImmediatePropagation()
方法,可以用于停止冒泡,并阻止当前元素上的处理程序运行。使用该方法之后,其他处理程序就不会被执行。不要在没有需要的情况下停止冒泡!
冒泡很方便。不要在没有真实需求时阻止它:除非是显而易见的,并且在架构上经过深思熟虑的。
例如捕获在整个窗口上的点击,以追踪用户的行为(用户点击的位置)。有些分析系统会这样做。通常,代码会使用
document.addEventListener('click'…)
来捕获所有的点击。如果阻止冒泡这样的方式就不可行。捕获
捕获阶段很少被使用。通常我们看不到它。它的过程与冒泡刚好相反
事件委托
事件委托又叫事件代理。就是指绑定事件不绑定本身而是绑定父级或者其他元素。
当一个节点中的子节点是动态生成的(或者很多),那么子节点需要注册事件的话应该注册在父节点上。这样会节省内存也不需要给子节点注销事件(React之前就是这么做的)。
intersectionObserver实现图片懒加载和无限滚动
常见的content-type
常见的媒体格式类型如下:
text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式 以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式 application/xml: XML数据格式 application/atom+xml :Atom XML聚合格式 application/json: JSON数据格式 application/pdf:pdf格式 application/msword : Word文档格式 application/octet-stream : 二进制流数据(如常见的文件下载) application/x-www-form-urlencoded :