前端技术点总结

来源:互联网 发布:网卡mac ip绑定 编辑:程序博客网 时间:2024/06/05 10:47




异步加载和延迟加载

1动态插入script标签
  1. window.onload = function () {  
  2.     setTimeout(function () {  
  3.   
  4.         // reference to <head>    
  5.         var head = document.getElementsByTagName('head')[0];  
  6.   
  7.         // a new CSS    
  8.         var css = document.createElement('link');  
  9.         css.type = "text/css";  
  10.         css.rel = "stylesheet";  
  11.         css.href = "new.css";  
  12.   
  13.         // a new JS    
  14.         var js = document.createElement("script");  
  15.         js.type = "text/javascript";  
  16.         js.src = "new.js";  
  17.   
  18.         // preload JS and CSS    
  19.         head.appendChild(css);  
  20.         head.appendChild(js);  
  21.   
  22.         // preload image    
  23.         new Image().src = "new.png";  
  24.   
  25.     }, 1000);  
  26. }; 
  27. 2. Iframe static page

     

    直接把需要加载东西放到另一个页面中


  1. window.onload = function () {  
  2.     setTimeout(function () {  
  3.   
  4.         // create a new frame and point to the URL of the static    
  5.         // page that has all components to preload    
  6.         var iframe = document.createElement('iframe');  
  7.         iframe.setAttribute("width""0");  
  8.         iframe.setAttribute("height""0");  
  9.         iframe.setAttribute("frameborder""0");  
  10.         iframe.src = "preloader.html";  
  11.         document.body.appendChild(iframe);  
  12.   
  13.     }, 1000);  
  14. };  

3. Ajax eval

用ajax下载代码,然后用eval执行

4 script标签上添加defer或者async属性




编写一个方法 求一个字符串的字节长度

假设:一个英文字符占用一个字节,一个中文字符占用两个字节

 function GetBytes(str){        var len = str.length;        var bytes = len;        for(var i=0; i<len; i++){            if (str.charCodeAt(i) > 255) bytes++;        }        return bytes;    }alert(GetBytes("你好,as"));

创建ajax的过程

    (1)创建`XMLHttpRequest`对象,也就是创建一个异步调用对象.    (2)创建一个新的`HTTP`请求,并指定该`HTTP`请求的方法、`URL`及验证信息.    (3)设置响应`HTTP`请求状态变化的函数.    (4)发送`HTTP`请求.    (5)获取异步调用返回的数据.    (6)使用JavaScript和DOM实现局部刷新.    var xmlHttp = new XMLHttpRequest();    xmlHttp.open('GET','demo.php','true');    xmlHttp.send()    xmlHttp.onreadystatechange = function(){        if(xmlHttp.readyState === 4 & xmlHttp.status === 200){        }    }


XMLJSON的区别?

(1).数据体积方面。JSON相对于XML来讲,数据的体积小,传递的速度更快些。(2).数据交互方面。JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。(3).数据描述方面。JSON对数据的描述性比XML较差。(4).传输速度方面。JSON的速度要远远快于XML。

4、简述一下src与href的区别

href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

5、什么是CSS Hack?

一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。
IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:

    // 1、条件Hack   <!--[if IE]>      <style>            .test{color:red;}      </style>   <![endif]-->   // 2、属性Hack    .test{    color:#090\9; /* For IE8+ */    *color:#f00;  /* For IE7 and earlier */    _color:#ff0;  /* For IE6 and earlier */    }   // 3、选择符Hack    * html .test{color:#090;}       /* For IE6 and earlier */    * + html .test{color:#ff0;}     /* For IE7 */   8、什么叫优雅降级和渐进增强?

渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:

a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

9、浏览器的内核分别是什么?

IE: trident内核Firefox:gecko内核Safari:webkit内核Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核Chrome:Blink(基于webkit,Google与Opera Software共同开发)


eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

1.CSS 相关问题

display:none和visibility:hidden的区别?

display:none  隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。visibility:hidden  隐藏对应的元素,但是在文档布局中仍保留原来的空间。

2:CSS中 link 和@import 的区别是?

A:(1) link属于HTML标签,而@import是CSS提供的; (2) 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;(3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题;


4:介绍一下CSS的盒子模型?

 *   可继承的样式: font-size font-family color, text-indent;    *   不可继承的样式:border padding margin width height ;

6:为什么要初始化CSS样式。

    因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
*最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)    淘宝的样式初始化:    body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }    body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }    h1, h2, h3, h4, h5, h6{ font-size:100%; }    address, cite, dfn, em, var { font-style:normal; }    code, kbd, pre, samp { font-family:couriernew, courier, monospace; }    small{ font-size:12px; }    ul, ol { list-style:none; }    a { text-decoration:none; }    a:hover { text-decoration:underline; }    sup { vertical-align:text-top; }    sub{ vertical-align:text-bottom; }    legend { color:#000; }    fieldset, img { border:0; }    button, input, select, textarea { font-size:100%; }    table { border-collapse:collapse; border-spacing:0; }

7、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

行内元素:a、b、span、img、input、strong、select、label、em、button、textarea块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img

8.documen.write和 innerHTML的区别

document.write只能重绘整个页面innerHTML可以重绘页面的一部分



9:IE6 两个并发,iE7升级之后的6个并发,之后版本也是6个Firefox,chrome也是6个


10:常见兼容性问题
(1)* 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会识别)
(2) 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}



11.什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?

 FOUC - Flash Of Unstyled Content 文档样式闪烁 <style type="text/css" media="all">@import "../fouc.css";</style>而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。
12:

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

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

BFC规范

Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

(1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器以何种模式来渲染文档。(2)、严格模式的排版和 JS 运作模式是  以该浏览器支持的最高标准运行。(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

你知道多少种Doctype文档类型?

 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。 HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。 XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks (包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

HTML与XHTML

9.如何实现浏览器内多个标签页之间的通信?

调用localstorge、cookies等本地存储方式

7.常见兼容性问题?

* 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识别*/      }*  IE下,可以使用获取常规属性的方法来获取自定义属性,   也可以使用getAttribute()获取自定义属性;   Firefox下,只能使用getAttribute()获取自定义属性.   解决方法:统一通过getAttribute()获取自定义属性.* IE下,event对象有x,y属性,但是没有pageX,pageY属性;  Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.* 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,  可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.* 怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推荐的写法:`<doctype html>`* ie6对png图片格式支持不好(引用一段脚本处理)


1.请你谈谈Cookie的弊端

cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。
第一:每个特定的域名下最多生成20个cookie

1.IE6或更低版本最多20个cookie2.IE7和之后的版本最后可以有50个cookie。3.Firefox最多50个cookie4.chrome和Safari没有做硬性限制

IEOpera 会清理近期最少使用的cookieFirefox会随机清理cookie

cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。

IE 提供了一种存储可以持久化用户数据,叫做uerData,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。

优点:极高的扩展性和可用性

1.通过良好的编程,控制保存在cookie中的session对象的大小。2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。

缺点:

1.`Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

2.浏览器本地存储

在较高版本的浏览器中,js提供了sessionStorageglobalStorage。在HTML5中提供了localStorage来取代globalStorage

html5中的Web Storage包括了两种存储方式:sessionStoragelocalStorage

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

3.web storage和cookie的区别

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie

但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生

浏览器的支持除了IE7及以下不支持外,其他标准浏览器都完全支持(ie及FF需在web服务器里运行),值得一提的是IE总是办好事,例如IE7、IE6中的UserData其实就是javascript本地存储的解决方案。通过简单的代码封装可以统一到所有的浏览器都支持web storage

localStoragesessionStorage都具有相同的操作方法,例如setItem、getItemremoveItem



CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?

   *   1.id选择器( # myid)        2.类选择器(.myclassname)        3.标签选择器(div, h1, p)        4.相邻选择器(h1 + p)        5.子选择器(ul > li)        6.后代选择器(li a)        7.通配符选择器( * )        8.属性选择器(a[rel = "external"])        9.伪类选择器(a: hover, li:nth-child)    *   可继承的样式: font-size font-family color, text-indent;    *   不可继承的样式:border padding margin width height ;    *   优先级就近原则,同权重情况下样式定义最近者为准;    *   载入样式以最后载入的定位为准;优先级为:   !important >  id > class > tag   important 比 内联优先级高,但内联比 id 要高CSS3新增伪类举例:p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。p:last-of-type  选择属于其父元素的最后 <p> 元素的每个 <p> 元素。p:only-of-type  选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。p:only-child    选择属于其父元素的唯一子元素的每个 <p> 元素。p:nth-child(2)  选择属于其父元素的第二个子元素的每个 <p> 元素。:enabled  :disabled 控制表单控件的禁用状态。:checked        单选框或复选框被选中。



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声明\新增的结构元素\功能元素

53.事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?

 1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。 2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。; 3.  ev.stopPropagation();注意旧ie的方法 ev.cancelBubble = true;

0 0