JYsdan


  • 首页

  • 归档

  • 标签

  • 搜索
close

面试小记

发表于 2016-08-07   |     |   阅读次数

记录在面试过程中被问到的一些问题,ps:面试真心是一个很好的学习机会,能看到好多自己的不足~~

  • 浅拷贝&&深拷贝
    浅拷贝会使的两个对象指向同一个内存地址,深拷贝则会开辟一块新的内存空间,然后将被复制对象的属性逐个复制,复制对象不会对被复制对象产生影响。

    • 浅拷贝

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      function clone(obj){
      var F = function() {};
      F.prototype = obj;
      return new F();
      }

      function clone(obj){
      var newObj={};
      for(attr in obj){
      newObj[attr]=obj[attr];
      }

      return newObj;
      }
    • 深拷贝

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      /*最简单的实现
      * 抛弃对象的constructor,RegExp等对象无法复制
      */

      var newObj = JSON.parse(JSON.stringify(obj));

      /*
      *这个函数可以实现数组等的深拷贝,不过还是有一些bug
      */

      function extendDeeply(superObj, subObj) {
      var subObj = subObj || {};
      for(prop in superObj){
      if(typeof superObj[prop] == "object") {
      superObj[prop] = (superObj[prop].construtor === Arrar) ? [] : {};
      extendDeeply(superObj[prop], superObj[prop]);
      }else{
      subObj[prop] = superObj[prop];
      }
      }
      return subObj;
      }

      实现比较完整的深拷贝,可以参考http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/

      阅读全文 »

web安全

发表于 2016-08-04   |   分类于 learning~   |     |   阅读次数

对web 安全的一些笔记~

  • XSS
    本质上是一种注入攻击,简单的说就是利用各种手段把恶意代码添加到网页中,并让受害者执行这段脚本。其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文本。这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本。当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

    阅读全文 »

前端性能优化——图片

发表于 2016-07-21   |   分类于 learning~   |     |   阅读次数

性能优化系列笔记,提升用户体验

图片内容占互联网内容总量的比例是非常大的,有一半多的流量和时间都用来下载图片,所以,图片是性能优化的重点。

阅读全文 »

继承

发表于 2016-07-17   |   分类于 learning~   |     |   阅读次数

《javascript 高级程序设计》——继承

JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型,使用原型链的继承方式。

prototype和length是每一个函数类型自带的两个属性,prototype属性是一个指针,指向它的原型对象。
原型对象内部也有一个指针(constructor属性)指向构造函数:Person.prototype.constructor = Person;
Js中的所有对象(undefined、null等特殊情况除外)都有一个内置的[[Prototype]]属性,指向它“父类”的prototype,这个内置属性在ECMA标准中并没有给出明确的获取方式,但是许多Js的实现(如Node、大部分浏览器等)都提供了一个proto属性来指代这一[[Prototype]],ES5中增加了一个方法,Object.getPrototypeOf(),返回proto的值

JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依此层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾

阅读全文 »

visibility

发表于 2016-07-15   |   分类于 learning~   |     |   阅读次数

通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;
Page Visibility API,主要有三部分组成:

  • document.hidden:表示页面是否隐藏的布尔值。页面隐藏包括 页面在后台标签页中 或者 浏览器最小化
  • document.visibilityState:表示下面 4 个可能状态的值
    • hidden:页面在后台标签页中或者浏览器最小化
    • visible:页面在前台标签页中
    • prerender:页面在屏幕外执行预渲染处理 document.hidden 的值为 true
    • unloaded:页面正在从内存中卸载
      阅读全文 »
123…8
JYsdan

JYsdan

唯美食与代码不可辜负~

40 日志
2 分类
28 标签
© 2016 JYsdan
由 Hexo 强力驱动
主题 - NexT.Pisces