2014年最新web前端开发面试题

2014年最新web前端开发面试题

本文是一份非常不错的2014年web前端开发工程师的面试题集锦,并附有参考答案,推荐大家参考下。

试题目录:

  1. HTML 部分
  2. CSS 部分
  3. JavaScript 部分
  4. 其他问题

面试注意点:

面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑。

题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。

进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学习,绝对不是临时记得住的。

回答问题再棒,面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲)

资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。

试题大纲:

HTML&CSS:
    对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移动端适应

JavaScript:  
    数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。

其他:
   HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯

web前端工程师知识点:

1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

2、DOM操作  ——如何添加、移除、移动、复制、创建和查找节点等。

3、事件    —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

8、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。

9、HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。

10、JSON  —— 作用、用途、设计结构。

HTML

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

(1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器,

      用什么文档类型 规范来解析这个文档。

 

(2)、严格模式的排版和 JS 运作模式是  以该浏览器支持的最高标准运行。

 

(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

 

(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

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

(1)CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,

  比如div默认display属性值为“block”,成为“块级”元素;

  span默认display属性值为“inline”,是“行内”元素。  

 

(2)行内元素有:a b span img input select strong(强调的语气)

 块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p  

 

(3)知名的空元素:

<br> <hr> <img> <input> <link> <meta

鲜为人知的是:

<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

link 和@import 的区别是?

(1)link属于XHTML标签,而@import是CSS提供的;

 

(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

 

(3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;

 

(4)link方式的样式的权重 高于@import的权重.

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

 * IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;

常见兼容性问题?

* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.

 

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

 

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

 

  浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} 

 

 这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

 

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

 

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

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

 

  css

      .bb{

       /*所有识别*/

      . /*IE6、7、8识别*/

      +/*IE6、7识别*/

      _/*IE6识别*/ 

      } 

 

*  IE下,可以使用获取常规属性的方法来获取自定义属性,

   也可以使用getAttribute()获取自定义属性;

   Firefox下,只能使用getAttribute()获取自定义属性.

   解决方法:统一通过getAttribute()获取自定义属性.

 

* IE下,even对象有x,y属性,但是没有pageX,pageY属性;

  Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.

 

* 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。

 

* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,

  可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.

 

超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hoveractive了解决方法是改变CSS属性的排列顺序:

L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

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

* HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。

 

* 绘画 canvas  

  用于媒介回放的 video 和 audio 元素

  本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

  sessionStorage 的数据在浏览器关闭后自动删除

 

  语意化更好的内容元素,比如 article、footer、header、nav、section

  表单控件,calendar、date、time、email、url、search  

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

语义化的理解?

用正确的标签做正确的事情!

html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;

在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。

搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。

使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

HTML5的离线储存?

localStorage    长期存储数据,浏览器关闭后数据不丢失;

sessionStorage  数据在浏览器关闭后自动删除。

(写)描述一段语义的html代码吧。

(HTML5中新增加的很多标签(如:<article>、<nav>、<header>和<footer>等)

 就是基于语义化设计原则)  

    < div id="header"> 

    < h1>标题< /h1> 

    < h2>专注Web前端技术< /h2> 

    < /div>

iframe有那些缺点?

*iframe会阻塞主页面的Onload事件;

 

*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript

动态给iframe添加src属性值,这样可以可以绕开以上两个问题。

请描述一下 cookies,sessionStorage 和 localStorage 的区别?

cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会

sessionStorage和localStorage的存储空间更大;

sessionStorage和localStorage有更多丰富易用的接口;

sessionStorage和localStorage各自独立的存储空间;

如何实现浏览器内多个标签页之间的通信? (阿里)

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

webSocket如何兼容低浏览器?(阿里)

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

CSS

介绍一下CSS的盒子模型?

(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

 

(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

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, UL LI DL DD DT;

 

*   不可继承的样式:border padding margin width height ;

 

*   优先级就近原则,同权重情况下样式定义最近者为准;

 

*   载入样式以最后载入的定位为准;

优先级为:

   !important >  id > class > tag  

 

   important 比 内联优先级高

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        单选框或复选框被选中。

如何居中div?如何居中一个浮动元素?

给div设置一个宽度,然后添加margin:0 auto属性

div{

    width:200px;

    margin:0 auto;

 }  

居中一个浮动元素

  确定容器的宽高 宽500 高 300 的层

  设置层的外边距

 

 .div {

  Width:500px ; height:300px;//高度可以不设

  Margin: -150px 0 0 -250px;

  position:relative;相对定位

  //方便看效果

  left:50%;

  top:50%;

列出display的值,说明他们的作用。position的值, relative和absolute定位原点是?

  1.   

  block 象块类型元素一样显示。

  none 缺省值。象行内元素类型一样显示。

  inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。

  list-item 象块类型元素一样显示,并添加样式列表标记。

 

  2. 

  *absolute

        生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

 

  *fixed (老IE不支持)

        生成绝对定位的元素,相对于浏览器窗口进行定位。

 

  *relative

        生成相对定位的元素,相对于其正常位置进行定位。

 

  * static  默认值。没有定位,元素出现在正常的流中

  *(忽略 top, bottom, left, right z-index 声明)。

 

  * inherit 规定从父元素继承 position 属性的值。

CSS3有哪些新特性?

  CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),

  对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)

  transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜

  增加了更多的CSS选择器  多背景 rgba

一个满屏 品 字布局 如何设计?

经常遇到的CSS的兼容性有哪些?原因,解决方法是什么?

为什么要初始化CSS样式。

- 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

 

- 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

 

*最简单的初始化方法就是: * {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; } 

absolute的containing block计算方式跟正常流有什么不同?

position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

对BFC规范的理解?

(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关 系和相互作用。)

css定义的权重

以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:

 

/*权重为1*/

div{

}

/*权重为10*/

.class1{

}

/*权重为100*/

#id1{

}

/*权重为100+1=101*/

#id1 div{

}

/*权重为10+1=11*/

.class1 div{

}

/*权重为10+10+1=21*/

.class1 .class2 div{

 

如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

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

用过媒体查询,针对移动端的布局吗?

使用 CSS 预处理器吗?喜欢那个?

SASS 

如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

display:inline-block 什么时候会显示间隙?(携程)

移除空格、使用margin负值、使用font-size:0、letter-spacingword-spacing

JavaScript

JavaScript原型,原型链 ? 有什么特点?

eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行;

应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

null,undefined 的区别?

写一个通用的事件侦听器函数。

    // event(事件)工具集,来源:github.com/markyun

    markyun.Event = {

        // 页面加载完成后

        readyEvent : function(fn) {

            if (fn==null) {

                fn=document;

            }

            var oldonload = window.onload;

            if (typeof window.onload != 'function') {

                window.onload = fn;

            } else {

                window.onload = function() {

                    oldonload();

                    fn();

                };

            }

        },

        // 视能力分别使用dom0||dom2||IE方式 来绑定事件

        // 参数: 操作的元素,事件名称 ,事件处理程序

        addEvent : function(element, type, handler) {

            if (element.addEventListener) {

                //事件类型、需要执行的函数、是否捕捉

                element.addEventListener(type, handler, false);

            } else if (element.attachEvent) {

                element.attachEvent('on' + type, function() {

                    handler.call(element);

                });

            } else {

                element['on' + type] = handler;

            }

        },

        // 移除事件

        removeEvent : function(element, type, handler) {

            if (element.removeEnentListener) {

                element.removeEnentListener(type, handler, false);

            } else if (element.datachEvent) {

                element.detachEvent('on' + type, handler);

            } else {

                element['on' + type] = null;

            }

        },

        // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)

        stopPropagation : function(ev) {

            if (ev.stopPropagation) {

                ev.stopPropagation();

            } else {

                ev.cancelBubble = true;

            }

        },

        // 取消事件的默认行为

        preventDefault : function(event) {

            if (event.preventDefault) {

                event.preventDefault();

            } else {

                event.returnValue = false;

            }

        },

        // 获取事件目标

        getTarget : function(event) {

            return event.target || event.srcElement;

        },

        // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;

        getEvent : function(e) {

            var ev = e || window.event;

            if (!ev) {

                var c = this.getEvent.caller;

                while (c) {

                    ev = c.arguments[0];

                    if (ev && Event == ev.constructor) {

                        break;

                    }

                    c = c.caller;

                }

            }

            return ev;

        }

    };

Node.js的适用场景?

高并发、聊天、实时消息推送

介绍js的基本数据类型。

number,string,boolean,object,undefined

Javascript如何实现继承?

通过原型和构造器

["1", "2", "3"].map(parseInt) 答案是多少?

 [1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix) 但 map 传了 3 个 (element, index, array)

如何创建一个对象? (画出此对象的内存图)

  function Person(name, age) {

    this.name = name;

    this.age = age;

    this.sing = function() { alert(this.name) }

  }

谈谈This对象的理解。

this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。

 

但是有一个总原则,那就是this指的是调用函数的那个对象。

 

this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

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

 1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。  

 2. 事件处理机制:IE是事件冒泡、火狐是 事件捕获;

 3. ev.stopPropagation();

什么是闭包(closure),为什么要用它?

执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,因为say667()的内部函数的执行需要依赖say667()中的变量。这是对闭包作用的非常直白的描述.

 

  function say667() {

    // Local variable that ends up within closure

    var num = 666;

    var sayAlert = function() { alert(num); }

    num++;

    return sayAlert;

}

 

 var sayAlert = say667();

 sayAlert()//执行结果应该弹出的667  

"use strict";是什么意思 ? 使用它的好处和坏处分别是什么?

如何判断一个对象是否属于某个类?

  使用instanceof (待完善)

 

   if(a instanceof Person){

       alert('yes');

   }

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

     1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

     2、属性和方法被加入到 this 引用的对象中。

     3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

 

var obj  = {};

obj.__proto__ = Base.prototype;

Base.call(obj);

Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

hasOwnProperty

JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

{'age':'12', 'name':'back'}

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

defer和async、动态创建DOM方式(用得最多)、按需异步载入js

ajax 是什么?

同步和异步的区别?

如何解决跨域问题?

jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面

模块化怎么做?

立即执行函数,不暴露私有成员

    var module1 = (function(){

        var _count = 0;

        var m1 = function(){

          //...

        };

        var m2 = function(){

          //...

        };

        return {

          m1 : m1,

          m2 : m2

        };

      })();

AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?

异步加载的方式有哪些?

  (1) defer,只支持IE

 

  (2) async

 

  (3) 创建script,插入到DOM中,加载完毕后callBack

documen.write和 innerHTML的区别

document.write只能重绘整个页面

innerHTML可以重绘页面的一部分

.call() 和 .apply() 的区别?

  例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); 

 

  注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

 

    function add(a,b)

    {

        alert(a+b);

    }

 

    function sub(a,b)

    {

        alert(a-b);

    }

 

    add.call(sub,3,1);  

Jquery与jQuery UI 有啥区别?

*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

 

*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。

 提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

JQuery的源码看过吗?能不能简单说一下它的实现原理?

jquery 中如何将数组转化为json字符串,然后再转化回来?

jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {

        return JSON.stringify(array)

    }

 

    $.fn.parseArray = function(array) {

        return JSON.parse(array)

    }

 

    然后调用:

    $("").stringifyArray(array)

针对 jQuery 的优化方法?

*基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。

 

*频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。   

 比如:var str=$("a").attr("href");

 

*for (var i = size; i < arr.length; i++) {}

 for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快:

 for (var i = size, length = arr.length; i < length; i++) {}

JavaScript中的作用域与变量声明提升?

如何编写高性能的Javascript?

那些操作会造成内存泄漏?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

 

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

JQuery一个对象可以同时绑定多个事件,这是如何实现的?

如何判断当前脚本运行在浏览器还是node环境中?(阿里)

通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中

其他问题

你遇到过比较难的技术问题是?你是如何解决的?

常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?

页面重构怎么操作?

列举IE 与其他浏览器不一样的特性?

99%的网站都需要被重构是那本书上写的?

什么叫优雅降级和渐进增强?

之前在看一些css3效果demo的时候,发现有些写css3属性时,兼容性的写法顺序不太一样,比如transition属性,有些把transition放在前面有些是放在后面,当然这也有可能包含了coder个人的习惯或是强迫性,比如下面这两种:

 

.transition{

  -webkit-transition: all .5s;

     -moz-transition: all .5s;

       -o-transition: all .5s;

          transition: all .5s;  

}

 

 

.transition{ 

       transition: all .5s;
    -o-transition: all .5s;

   -moz-transition: all .5s;

 -webkit-transition: all .5s;

}

 

带前缀的排列应该只是为了整齐吧(还是代表了对浏览器的喜好程度)?但是transition放在前面还是后面却引申了两个概念:优雅降级和渐进增强。

优雅降级和渐进增强印象中是随着css3流出来的一个概念。由于低级浏览器不支持css3,但css3的效果又太优秀不忍放弃,所以在高级浏览中使用css3而低级浏览器只保证最基本的功能。咋一看两个概念差不多,都是在关注不同浏览器下的不同体验,关键的区别是他们所侧重的内容,以及这种不同造成的工作流程的差异。

 

什么是渐进增强(progressive enhancement)、优雅降级(graceful degradation)呢?

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

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

  区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。

 

优雅降级观点

优雅降级观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为过时或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IEMozilla 等)的前一个版本。

在这种设计范例下,旧版的浏览器被认为仅能提供简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

 

渐进增强观点

渐进增强观点则认为应关注于内容本身。

内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得渐进增强成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其分级式浏览器支持 (Graded Browser Support)”策略的原因所在。

 

WEB应用从服务器主动推送Data到客户端有那些方式?

对Node的优点和缺点提出了自己的看法?

*(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,

  因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。

  此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,

  因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

 

*(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,

  而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。

你有哪些性能优化的方法?

 (看雅虎14条性能优化原则)。

 

  (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

 

  (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

 

  (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

 

  (4) 当需要设置的样式很多时设置className而不是直接操作style。

 

  (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

 

  (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

 

  (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

 

  (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。

http状态码有那些?分别代表是什么意思?

100-199 用于指定客户端应相应的某些动作。

200-299 用于表示请求成功。

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

400-499 用于指出客户端的错误。400    1、语义有误,当前请求无法被服务器理解。401   当前请求需要用户验证 403  服务器已经理解请求,但是拒绝执行它。

500-599 用于支持服务器错误。 503 – 服务不可用

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

    查找浏览器缓存

    DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求

    进行HTTP协议会话

    客户端发送报头(请求报头)

    服务器回馈报头(响应报头)

    html文档开始下载

    文档树建立,根据标记请求所需指定MIME类型的文件

    文件显示

    [

    浏览器这边做的工作大致分为以下几步:

 

    加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。

 

    解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)

    }

除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?

你常用的开发工具是什么,为什么?

sublime

代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持WindowsLinuxMac OS X等操作系统。

2012626日推出新版本的Sublime Text 2.0,与之前版本相比主要有较大的改善:支持 Retina 视网膜屏、快速跳到下一个、文本拖放、改善构建系统、CSS 自动完成和高亮设置等。

推荐插件

GBK to UTF8

将文件编码从GBK转换成UTF8快捷键Ctrl+Shift+C

zenCoding

zenCoding是一种快速的htmlcss编写方式。默认用tab.

已经更名为Emmet

JS Format

一个JS代码格式化插件。默认ctrl+alt+f

BracketHighlighter

括弧高亮插件,清晰明了

Git

代码版本管理

 

 

对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

     前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。

    1、实现界面交互

    2、提升用户体验

    3、有了Node.js,前端可以实现服务端的一些事情

 

前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,

 

 参与项目,快速高质量完成实现效果图,精确到1px;

 

 与团队成员,UI设计,产品经理的沟通;

 

 做好的页面结构,页面重构和用户体验;

 

 处理hack,兼容、写出优美的代码格式;

 

 针对服务器的优化、拥抱最新前端技术。

加班的看法?

加班就像借钱,原则应当是------救急不救穷

平时如何管理你的项目?

        先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

 

        编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

 

        标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

 

        页面进行标注(例如 页面 模块 开始和结束);

 

        CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

 

        JS 分文件夹存放 命名以该JS功能为准的英文翻译。

 

        图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

如何设计突发大规模并发架构?

说说最近最流行的一些东西吧?常去哪些网站?

    Node.js、Mongodb、npm、MVVM、MEAN、three.js

移动端(Android IOS)怎么做好用户体验?

    清晰的视觉纵线、信息的分组、极致的减法、

    利用选择代替输入、标签及文字的排布方式、

    依靠明文确认密码、合理的键盘利用、

你在现在的团队处于什么样的角色,起到了什么明显的作用?

你认为怎样才是全端工程师(Full Stack developer)?

介绍一个你最得意的作品吧?

你的优点是什么?缺点是什么?

如何管理前端团队?

最近在学什么?能谈谈你未来3,5年给自己的规划吗?

想问公司的问题?

    问公司问题:

    目前关注哪些最新的Web前端技术(未来的发展方向)?

    前端团队如何工作的(实现一个产品的流程)?

    公司的薪资结构是什么样子的?

 

 

 

 

Web开发工程师笔试题(js)

本文为大家整理的是几道Web开发工程师笔试题(js方向),感兴趣的同学参考下。

1, 判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20

var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;

reg.test("a1a__a1a__a1a__a1a__");

2,截取字符串abcdefg的efg

var str = "abcdefg";

if (/efg/.test(str)) {

  var efg = str.substr(str.indexOf("efg"), 3);

  alert(efg);

 }

3,判断一个字符串中出现次数最多的字符,统计这个次数

//将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数

var str = "abcdefgaddda";

var obj = {};

for (var i = 0, l = str.length; i < l; i++) {

   var key = str[i];

   if (!obj[key]) {

      obj[key] = 1;

   } else {

      obj[key]++;

   }

}

 

 

/*遍历这个hash table,获取value最大的key和value*/

var max = -1;

var max_key = "";

var key;

for (key in obj) {

   if (max < obj[key]) {

 

 

 

 

 

 

javascript工程师笔试试题

本文为大家整理的是一份javascript工程师笔试试题,感兴趣的同学参考下。

一、单选题

  1、以下哪条语句会产生运行错误:(a)

  A.var obj = ();//语法错误

  B.var obj = [];//创建数组

  C.var obj = {};//创建对象

  D.var obj = //;

  原因:var obj = new Array ();是对的;JavaScript 中大括号默示创建对象。var obj = { id:1, name:"jacky" };alert(obj.name);上例默示创建一个具有属性 id (值为 1)、属性 name(值为 jacky)的对象。属性名称可以用引号引起来成 "id"、"name",也可以不引。

  当然除了属性,也可以创建办法。

  实验代码

  /* window.onload=function()

  {

  // var obj = ();

  var obj1 = [];//object

  var obj2 = {};//object

  var obj3 = //;//undefine

  alert(typeof(obj1));

  alert(typeof(obj2));

  alert(typeof(obj3));

  }*/

  function showName()

  {

  alert(this.name);

  }

  var obj = { id:1, name:"jacky", showName:showName };

  obj.showName();

  运行成果是jacky

  2、以下哪个单词不属于javascript保存字:(b)

  A.with

  B.parent

  C.class

  D.void

  以下的保存字不成以用作变量,函数名,对象名等,此中有的保存字是为今后JAVASCRIPT扩大用的.

  · abstract

  · boolean

  · break

  · byte

  · case

  · catch

  · char

  · class

  · const

  · continue

  · default

  · do

  · double

  · else

  · extends

  · false

  · final

  · finally

  · float

  · for

  · function

  · goto

  · if

  · implements

  · import

  · in

  · instanceof

  · int

  · interface

  · long

  · native

  · new

  · null

  · package

  · private

  · protected

  · public

  · return

  · short

  · static

  · super

  · switch

  · synchronized

  · this

  · throw

  · throws

  · transient

  · true

  · try

  · var

  · void

  · while

  · with

  3、请选择成果为真的表达式:(c)

  A.null instanceof Object(if(!(null instanceof Object))是真的)

  B.null === undefined

  C.null == undefined

  D.NaN == NaN (false)

  (1) null确切可以懂得为原始类型,不克不及当Object懂得!

  null,int,float.....等这些用关键字默示的类型,都不属于Object.

  至于可以把null作为参数,只是特别规定罢了.

  可以这么懂得:

  对象的引用代表的是一个内存的值,null是一个空引用,可以懂得为内存的值为0;按这个意思对代码

  (2) function f1(){

  }

  1. alert(f1 instanceof Function);//true

  2. alert(f1 instanceof Object);//true

  3. alert(Function instanceof Object);//true

  4. alert(Object instanceof Function);//true

  Function 是Object的实例,Object又是Function的实例

  Function是函数的机关函数,而Object也是函数,Function自身也是函数

  Object.prototype是一切原型链的顶点,instanceof会查找全部原型链

  window.onload=function()

  {

  if(NaN == NaN)

  {

  alert("ddd");

  }

  }

  不会alert因为NaN==NaN is false and aslo NaN==""NaN"" is false

二、不定项选择题

  4、请选择对javascript懂得有误的:(abcd)

  A.JScript是javascript的简称

  B.javascript是网景公司开辟的一种Java脚本说话,其目标是为了简化Java的开起事度

  C.FireFox和IE存在多量兼容性题目的首要原因在于他们对javascript的支撑不合上

  D.AJAX技巧必然要应用javascript技巧

  5、foo对象有att属性,那么获取att属性的值,以下哪些做法是可以的:()

  A.foo.att

  B.foo(“att”)

  C.foo[“att”]

  D.foo{“att”}

  E.foo[“a”+”t”+”t”]

  6、在不指定特别属性的景象下,哪几种HTML标签可以手动输入文本:()

  7、以下哪些是javascript的全局函数:(abc)

  A.escape

  B.parseFloat

  C.eval

  D.setTimeout

  E.alert

  8、关于IFrame表述正确的有:(abcd)

  A.经由过程IFrame,网页可以嵌入其他网页内容,并可以动态更改

  B.在雷同域名下,内嵌的IFrame可以获取外层网页的对象

  C.在雷同域名下,外层网页脚本可以获取IFrame网页内的对象

  D.可以经由过程脚本调剂IFrame的大小

  9、关于表格表述正确的有:(abcde)

  A.表格中可以包含TBODY元素

  B.表格中可以包含CAPTION元素

  C.表格中可以包含多个TBODY元素

  D.表格中可以包含COLGROUP元素

  E.表格中可以包含COL元素

  10、关于IE的window对象表述正确的有:(acd)

  A.window.opener属性本身就是指向window对象

  B.window.reload()办法可以用来刷新当前页面

  C.window.location=”a.html”和window.location.href=”a.html”的感化都是把当前页面调换成a.html页面

  D.定义了全局变量g;可以用window.g的体式格式来存取该变量

三、问答题:

  1、谈谈javascript数组排序办法sort()的应用,重点介绍sort()参数的应用及其内部机制

  sort的实现的功能类似JAVA的斗劲器,数据排序从数组的第一维开端排序

  可以本身定义排序办法,很不久不多的函数

  2、简述DIV元素和SPAN元素的差别。

  DIV有回车,SPAN没有

  3、连络text这段布局,谈谈innerHTML outerHTML innerText之间的差别。

  innerHTML对象里面的HTML,outerHTML包含对象和里面的HTML

  innerText对象里面的文本

  4、说几条XHTML规范的内容(至少3条)

  属性加引号,不克不及有不匹配的标签,加定义

  5、对Web标准化(或网站重构)知道哪些相干的常识,简述几条你知道的Web标准?

  网页首要由三项目组构成:布局(Structure)、发挥解析(Presentation)和行动(Behavior)。对应的网站标准也分三方面:布局化标准说话,首要包含XHTML和XML;发挥解析标准说话首要包含CSS;行动标准首要包含对象模型(如W3C DOM)、ECMAScript等。

 

 

 

 

 

 

 

 

 

 

 

 

互联网公司web前端工程师笔试题目汇总

随着各大互联网公司设立了web前端开发工程师、设计工程师等职位,web前端越来越得到互联网企业的认可。而且其重视程度与地位也随着浏览器端的富客户端的体现而日益提高。 眼前对html5的未来和走向,业内的预测是会和flash、silverlight等相结合,从而取代传统的客户端应用程序。而实现这个目标的客户端核心工作是有web前端工程师来完成的。 从另一个角度,对于web产品来说,交互和用户体验是产品的第一价值,这部分价值的体现就是在web前端。可以说web前端是一个web产品的长相和谈吐、行为。

下面就简单的说明一下web前端的组成部分。

1. ui设计部分

这是web产品化的第一步。这个部分通常在稍大型的公司里,被单独设立为一个部门或者一些人来工作。主要是要掌握photo, ai,可以很快的将创意转化为平面设计图,并制作png等小图片。 同时,ui设计还要预包含用户交互设计的元素,如何和用户交互的基本原型等。

2. html/css,页面静态化

这是web产品化的2步,就是将ui设计师的设计图切成静态页面。这里的“切”不是单纯的切,而是使用css里面背景色和边框样式等方式对设计原稿进行解读,并形成符合web标准的html代码。这里web前端还需要将图片、html页面以及css样式进行合理的文件分布安排等

3.javascript, as 客户端动态化

这是web产品化的3步,工程师使用dom操作、ajax,实现数据和服务端的通信以及本地样式的切换。同时,由于javascript、as是一门动态语言,所以这部分的编码要求web前端工程师有较好的编码习惯,能写高效率的oop代码,并对代码进行压缩上线以降低带宽消耗等。

4.flash、silverlight、video 多媒体化

这部分针对不同web产品有不同的要求,通常要求是可以使用flash和web、server进行交互,并对flash进行设计与开发。

5.php、java等cgi, 服务端通信基本知识和编码

这部分主要是更好的使用ajax等技术,了解服务端的工作方式将更有利于web前端工程师工作的开展。通常优秀的web前端工程师都是对服务端的一种开发语言很了解。

下面是webryan整理的百度web前端笔试和面试的一些题目和过程,提供给大家借鉴。

百度web前端笔试试卷上的题目:

1.判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20

2.截取字符串abcdefg的efg

3.让一个input的背景颜色变成红色

4。给一个页面,写html css

5。div的高宽等于浏览器可见区域的高宽,浏览器滚动,div始终覆盖浏览器的整个可见区域

6。判断一个字符串中出现次数最多的字符,统计这个次数

7。ie与ff脚本兼容性问题

又重新问的是1,4,6,7,这次问出题者的意图,并且让给出7的更多答案,以及ie ff不兼容的原因

然后看了看简历,没有问简历上的项目,而是让自己随便谈谈

1对于web客户端技术未来趋势发展谈谈看法

javascript + ajax=ria

adobe flash as 3

flex

sliveright

2web开发团队人员应该如何分工协作

布局 css 脚本

比如脚本人员长期的积累可能铸造类型yui这样的产品级脚本库(亮点)

3web开发曾经的团队有没有别人遇到问题,什么问题,向你请教

4如果要实习,什么时候可以

5自己在开发的过程中遇到什么问题,谈谈看法

6web开发脚本开发环境用什么、调试用什么

试过aptana,现在就用editplus

调试肯定用firebug,ie下看页面dom用ieinspector

7如果有个新技术,现在需要掌握,你会怎么做

新技术的发现我一般是通过rss工具,比如我用googlereader

每天有半个小时左右在看最新的资讯、技术走向

发现新技术,首先有个大概了解,如果有深入的必要

我一般会看他的官网,比如jquery,我会搜索到www.jquery.com,然后看docs、samples

如果要用到项目中,有困难的问题,我会svn得到最新的这个技术的源码,深入跟踪进去,看实现原理

一般现在涌现的技术都是opensource

提问时间

1百度web开发脚本是否有做类似yui库的打算

2百度web开发工程师打算招多少人

百度电话二面回忆 web开发部–web开发工程师

首先是自我介绍

然后谈谈做的web项目

然后开始问技术问题

前端开发的优化问题

答:

产品发布时,js的压缩,即函数名替换、整个文件压缩成一行

css开发的时候 注释写清楚,先有个base.css,然后根据不同页面需要再加css,发布的时候将css中的一个定义写成一行,目的是压缩文件大小

最终发布的时候甚至可以将css,js分别压缩成一个文件,甚至css、js通过技巧压缩到一个里边(亮点)

这样的目的是,减少用户访问web产品的http连接数

web前端产品的开发流程

答:首先根据产品的定位、用户群,确定配色,然后纸上设计整体布局,然后png或者psd出效果图,切出需要的小图片,然后手写代码div+css构造出页面,然后根据功能写脚本

参考126邮箱首页,将所有小图片放到一个图片中,通过css的background-position实现页面,还是为了优化,减少http连接数

规避javascript多人开发函数重名问题

答:首先是通过命名规范,比如根据不同的开发人员实现的功能,在函数名加前缀,虽然函数名看起来复杂,发布的时候还是可以替换,从而优化。

还有一种办法是,每个开发人员都把自己的函数封装到类中,然后调用的时候即使函数名相同,但是因为是要类.函数名来调用,所以也减少了重复的可能性。

javascript面向对象中继承实现

答:我是用prototype.js extend.js扩展

然后子类中parent.initialize()…

答的不好

正确答案:

// 1. 构造器

function animal() {};

function mammal() {};

function canine() {};

function dog() {};

// 2. 原型链表

mammal.prototype = new animal();

canine.prototype = new mammal();

dog.prototype = new canine();

prototype.js实现的基本原理

答:

将功能封装

比如ajax.request,还是有判断浏览器的代码;position这样的实现页面元素位置的计算

prototye太大,如果一个页面功能不需要这样的,自己实现,怎么做

答:首先页面、css、脚本分离之后,脚本中将整个模块功能写成一个类var do={}

其中初始化函数init:function(){},然后最后做do.init()

其中init会对页面上form中需要交互的元素绑定事件,比如$(’input1′).onclick=function(){}

ie、ff下面脚本的区别

答:

1.ie有outerhtml,ff没有

2.页面元素id,ie可以直接取,ff必须document.getelementbyid()

3.ajax里边ff是new xmlhttprequest,而ie是

try new activexobject(’msxml2.xmlhttp’) try new activexobject(’microsoft.xmlhttp’)

ff下面实现outerhtml

答:.parenet.firstchild .parent.innerhtml

这个没答好

正确答案:原理是,get:取到这个标签的tagname,然后属性循环构造成这个标签的属性

set:把字符串用insertbefore插入到这个元素前面,然后removechild这个元素

ie、ff下面css的解释区别

答:

1.png透明背景,ff下面没有问题,ie需要用滤镜通道

2.z-index在ie、ff下面的解释问题,

ie会认为第一个z-index=0

3.长字符串,word-wrap:break-all可以解决ie,但是ff需要overflow:hidden才行

冯舒娅补充:

1、有些标签在ff中不能用,比如button

2、滤镜

3、鼠标cursor:hand cursor:pointer

4、div的高度自适应

5、对box模型解析不一样

6、ul、ol的padding和margin

ie都能识别*,标准浏览器(如ff)不能识别*;

ie6能识别*,但不能识别 !important;

ie7能识别*,也能识别 !important;

ff不能识别*,但能识别 !important;

例如style=”*width:10px;!important width:20px;”

这样在ie6下宽度为10px,在ie7下宽度时20px

web前端技术的展望

答:javascript ajax;flash as;flex;sliveright

附上网上的百度web开发工程师笔试问题集

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

2编写一个方法 去掉一个数组的重复元素

3说出3条以上ff和ie的脚本兼容问题

ie 有children,ff没有;ie有parentelement,ff没有;ie有innertext,outertext,outerhtml,ff 没有;ff有htmlelement,htmldivelement,xmldocument,documentfragment,node, event,element等等,ie没有;ie有数据岛,ff没有;ie跟ff创建httprequest实例的方法不一样。。等等。。

4用脚本写去除字符串的前后空格

string.prototype.trim = function(mode)

{//前后去空格

if (mode==’left’) {

return ((this.charat(0) == ” “ && this.length > 0) ? this.slice(1).trim(’left’) : this);

} else

if (mode == ’right’) {

return ((this.charat(this.length - 1) == ” “ && this.length > 0) ? this.slice(0, this.length - 1).trim(’right’) : this);

} else {

return this.trim(’left’).trim(’right’);

}

};

5算出字符串中出现次数最多的字符是什么,出现了多少次

6写出3中使用this的典型应用

在html元素事件属性中inline方式使用this关键字:

7.最后一个问题是,如何制作一个combo选项,就是可以输入可以下拉菜单选择。

这个网上有很多成品,主要是通过绝对定位和相对定位结合的方式,改造原有的select 标签和input标签的方法。

附上javascript正则表达式的基本知识:

g: 全局匹配

i: 忽略大小写

^ 匹配一个输入或一行的开头,/^a/匹配”an a”,而不匹配”an a”

$ 匹配一个输入或一行的结尾,/a$/匹配”an a”,而不匹配”an a”

* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa

+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa

? 匹配前面元字符0次或1次,/ba*/将匹配b,ba

(x) 匹配x保存x在名为$1…$9的变量中

x|y 匹配x或y

{n} 精确匹配n次

{n,} 匹配n次以上

{n,m} 匹配n-m次

[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)

[^xyz] 不匹配这个集合中的任何一个字符

[b] 匹配一个退格符

b 匹配一个单词的边界

b 匹配一个单词的非边界

cx 这儿,x是一个控制符,/cm/匹配ctrl-m

d 匹配一个字数字符,/d/ = /[0-9]/

d 匹配一个非字数字符,/d/ = /[^0-9]/

n 匹配一个换行符

r 匹配一个回车符

s 匹配一个空白字符,包括n,r,f,t,v等

s 匹配一个非空白字符,等于/[^nfrtv]/

t 匹配一个制表符

v 匹配一个重直制表符

w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配”$5.98′中的5,等于[a-za-z0-9]

w 匹配一个不可以组成单词的字符,如[w]匹配”$5.98′中的$,等于[^a-za-z0-9

举例:验证email

var myreg = /^[_a-z0-9]+@([_a-z0-9]+.)+[a-z0-9]{2,3}$/;

if(myreg.test(stremail)) return true;

 

posted @ 2016-05-29 15:39  Shimily  阅读(255)  评论(0编辑  收藏  举报