前端知识点沉淀

  • Set的兼容性处理

    • babel只是转换语法但是不转换api
  • 实现拖拽

    • 利用mousedown(moveStart) mousemove(moving) mouseup(moved)利用标志位判断是否可以拖动
  • jsdomlist转数组

<!-- 一般用此方法转换成数组,但是在IE8及更早版本吧nodelist实现成一个COM对象,不能用js对象的方法,所以IE8之前需要枚举所有对象 -->
Array.prototype.slice.call(someNode.childNodes,0);

<!-- 通用的方法 -->

function convertListToArray(nodes) {
var array = null;
try{
array = Array.prototype.slice.call(nodes,0);
}catch(ex){
array = new Array();
for(var i = 0,len = nodes.length;i < len;i++) {
array.push(nodes[i]);
}
}

return array;
}
  • css3圆形头像

    • 相等时,直接用border-radius 50%
    • 不相等时外层用div border-radius 50%,然后图片border-radius 50% 并且 100%填充
  • js垃圾回收机制

    • 标记清除模式,分进入环境标记和离开环境标记,然后给在当前执行环境和有引用的去掉标记,剩下带标记的就是要清除的元素
    • 计数清除模式,声明对象引用的时候+1,减少引用的时候-1,当引用数为0是,回收对象,但是有一个问题就是循环引用,ie9之前就是用的计数清除模式,比如当时的BOM和COM对象还不是js对象,所以使用dom对象和js对象就可能造成循环引用,解决方式是设置为null解除引用
  • [] 和 new Array的区别

    • 唯一的区别是[]不会调用构造函数,而new会
    • 建议使用字面量的形式,可读性好,看起来像可封装的
  • js 堆与栈的区别

  • 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
    操作方式类似于数据结构中的栈。
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
    收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
  • js 500 501 502 503 504状态码

    • 500表示服务器内部错误
    • 501指服务器不具备请求的功能
    • 502表示网关地址错误
    • 503表示服务不可用,一般表示维护
    • 504表示网关请求超时
    • 505表示http的版本是不受支持的
  • session和cookie的区别

    • cookie和session都是会话技术,cookie运行在客户端,session运行在服务端
    • cookie有大小限制,一般是4k,而session一般没有大小限制
    • cookie有安全隐患,通过拦截本地文件可以找到cookie进行攻击
    • session会在服务器上保留一段时间才消失,session过多会增加服务器压力
  • 千位分隔符

  • charAt和[]下标访问方法的区别,一个是如果超出范围的话,[]返回undefined,而charAt会返回空字符串,而且IE6-8不支持下标访问,charAt则没有此问题

function toThounds(num){
var result = '',counter = 0;
num = (num || 0).toString();
var len = num.length;
for(let i=len-1;i>=0;i--){
counter++;
result = num.charAt(i)+result;
console.log(result)
if (!(counter % 3) && i != 0) {

result = ',' + result;
}
}
return result;
}
  • 函数柯里化

    • 参数复用、延迟计算、提前返回
  • 模块化解决的问题

    • 命名空间的冲突问题
    • 文件依赖的问题
    • es6的模块化输出一个值的引用,也就是说加载的时候不会执行,而是一个引用,当执行到的时候才会去里面取值,所以值是会随着执行的变化而变化的(有点类似CMD),但是commonjs是输出一个值的拷贝,就是说执行的时候就算改变了也只会输出原值,使用函数才可以取到内部变动的值