踩坑

  • 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 参数。
});
  • forEachmap方法中不可使用await
  • forEach操作item也不会改变原数组
  • if(-1)是true
  • myfunction.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滚动到视口中

你可能感兴趣的:(javascript)