1.常见兼容性问题?

png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.

浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。

IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。)

#box{ float:left; width:10px; margin:0 0 0 100px;}

这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入

_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

渐进识别的方式,从总体中逐渐排除局部。

  首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。

  接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

  css

      .bb{

       background-color:#f1ee18;/*所有识别*/

     .background-color:#00deff\9; /*IE6、7、8识别*/

     +background-color:#a200ff;/*IE6、7识别*/

     _background-color:#1e0bd1;/*IE6识别*/

 

      }

怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发

怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在

可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推荐的写法:`<doctype html>`

上下margin重合问题

ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,但是margin-top和margin-bottom却会发生重合。

解决方法,养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom。


    2.解释下浮动和它的工作原理?清除浮动的技巧

    浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。
    1.使用空标签清除浮动。
       这种方法是在所有浮动标签后面添加一个空标签 定义cssclear:both. 弊端就是增加了无意义标签。
    2.使用overflow。
       给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
    3.使用after伪对象清除浮动。
       该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;


      3.浮动元素引起的问题和解决办法?

      浮动元素引起的问题:
      
      (1)父元素的高度无法被撑开,影响与父元素同级的元素
      
      (2)与浮动元素同级的非浮动元素(内联元素)会跟随其后
      
      (3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
      
      解决方法:
      
      使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:
      
          .clearfix:after{content:".";display: block;height:0;clear: both;visibility: hidden;}
      
         .clearfix{display: inline-block;} /* for IE/Mac */
      
      清除浮动的几种方法:
      
          1,额外标签法,<divstyle="clear:both;"></div>(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)
      
          2,使用after伪类
      
          #parent:after{
      
              content:".";
      
              height:0;
      
              visibility:hidden;
      
              display:block;
      
              clear:both;
      
              }
      
          3,浮动外部元素
      
          4,设置overflow为hidden或者auto


        4.DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

        1)创建新节点
        
             createDocumentFragment()    //创建一个DOM片段
        
             createElement()   //创建一个具体的元素
        
             createTextNode()   //创建一个文本节点
        
        2)添加、移除、替换、插入
        
              appendChild()
        
              removeChild()
        
             replaceChild()
        
             insertBefore() //并没有insertAfter()
        
        3)查找
        
             getElementsByTagName()    //通过标签名称
        
             getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,
        
              会得到一个数组,其中包括id等于name值的)
        
             getElementById()    //通过元素Id,唯一性


          5.html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

          HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
          
            拖拽释放(Drag and drop) API
          
            语义化更好的内容标签(header,nav,footer,aside,article,section)
          
            音频、视频API(audio,video)
          
            画布(Canvas) API
          
            地理(Geolocation) API
          
            本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
          
            sessionStorage 的数据在浏览器关闭后自动删除
          
            表单控件,calendar、date、time、email、url、search
          
            新的技术webworker, websocket,Geolocation
          
          移除的元素
          
          纯表现的元素:basefont,big,center,font, s,strike,tt,u;
          
           
          
          对可用性产生负面影响的元素:frame,frameset,noframes;
          
          支持HTML5新标签:
          
              IE8/IE7/IE6支持通过document.createElement方法产生的标签,
          
              可以利用这一特性让这些浏览器支持HTML5新标签,
          
              当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
          
                 <!--[if lt IE 9]>
          
                <script>src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
          
                <![endif]-->
          
              如何区分: DOCTYPE声明\新增的结构元素\功能元素


            6.null和undefined的区别?

            null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
            
            当声明的变量还未被初始化时,变量的默认值为undefined。
            
            null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
            
            undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
            
            (1)变量被声明了,但没有赋值时,就等于undefined。
            
            (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
            
            (3)对象没有赋值的属性,该属性的值为undefined。
            
            (4)函数没有返回值时,默认返回undefined。
            
            null表示”没有对象”,即该处不应该有值。典型用法是:
            
            (1) 作为函数的参数,表示该函数的参数不是对象。
            
            (2) 作为对象原型链的终点。


              7.new操作符具体干了什么呢?

               1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
               2、属性和方法被加入到 this 引用的对象中。
               3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
              var obj  = {};
              obj.__proto__ = Base.prototype;
              Base.call(obj);


                8.js延迟加载的方式有哪些?

                defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js


                  9.call() 和 apply() 的区别和作用?

                  作用:动态改变某个类的某个方法的运行环境(执行上下文)。
                  区别参见:[JavaScript学习总结(四)function函数部分][3]


                    10.哪些操作会造成内存泄漏?

                    内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
                    
                    垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
                    
                    setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
                    
                    闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)