- json的属性名必须是双引号""而不能是单引号’’,否则无法被JSON.parse解析,会报语法错误;
JSON.parse('{"foo" : 1, }')
应省略末尾的逗号,否则无法解析;JSON.parse(String , Function)
第二个参数接受reviver
函数,此函数会在JSON解析完毕后,会从最里层到最外层调用reviver
函数,在函数中this
为当前属性所属对象,属性名与值会作为第一、二参数传入reviver
函数,reviver
函数返回undefined
会删除当前属性,返回其它值则会改变当前属性值。当传入值为""空字符串时表示此时已经到达最外层。
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v; // 如果到了最顶层,则直接返回属性值,
return v * 2; // 否则将属性值变为原来的 2 倍。
}); // { p: 10 }
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
// 最后一个属性名会是个空字符串。
return v; // 返回原始属性值,相当于没有传递 reviver 参数。
});
forEach
与map
方法中不可使用await
forEach
操作item也不会改变原数组if(-1)
是truemyfunction.bind(this,1,2,3)
最终会创建一个新函数并传入1,2,3假如创建出的函数作为回调函数再传入的参数会排在1,2,3后面promise
新建后(new 后)就会立刻执行- window.addEventListener(‘scroll’,function(){}),判断滑动距离时html.scrollTop和body.scrollTop可能其中一个为0,建议使用html.getBoundingClientRect().top,将会返回html相对于视口的距离,可能为负数;
- 在window上监听scroll事件,使用jQuery或者Zepto删除大量元素时会触发到scroll事件。
- a标签下载文件时,例如pdf文件,浏览器有设置可以使pdf文件总是打开而不是下载所以用xhr请求添加responseType为blob之后在用FileReader读取并用readAsDataURL再下载会好使。
- execCommand实现复制到剪贴板的功能有时候会不好使,推荐使用clipboard.js来做
- -webkit-overflow-scrolling:touch解决ios滑动不流畅的问题
- element.scrollIntoView()方法能让这个element滚动到视口中