前端面试宝典超

2020年08月18日 阅读数:91
这篇文章主要向大家介绍前端面试宝典超,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、HTML和CSS

一、你作的页面在哪些流览器测试过?这些浏览器的内核分别是什么?

IE: trident内核javascript

Firefox:gecko内核php

Safari:webkit内核css

Opera:之前是presto内核,Opera现已改用Google Chrome的Blink内核html

Chrome:Blink(基于webkit,Google与Opera Software共同开发)前端

二、每一个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?

<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签以前。此标签可告知浏览器文档使用哪一种 HTML 或 XHTML 规范。(重点:告诉浏览器按照何种规范解析页面)html5

三、Quirks模式是什么?它和Standards模式有什么区别

从IE6开始,引入了Standards模式,标准模式中,浏览器尝试给符合标准的文档在规范上的正确处理达到在指定浏览器中的程度。java

在IE6以前CSS还不够成熟,因此IE5等以前的浏览器对CSS的支持不好, IE6将对CSS提供更好的支持,然而这时的问题就来了,由于有不少页面是基于旧的布局方式写的,而若是IE6 支持CSS则将令这些页面显示不正常,如何在即保证不破坏现有页面,又提供新的渲染机制呢?node

在写程序时咱们也会常常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤为是新功能不兼容旧功能时。遇到这种问题时的一个常见作法是增长参数和分支,即当某个参数为真时,咱们就使用新功能,而若是这个参数 不为真时,就使用旧功能,这样就能不破坏原有的程序,又提供新功能。IE6也是相似这样作的,它将DTD当成了这个“参数”,由于之前的页面你们都不会去写DTD,因此IE6就假定 若是写了DTD,就意味着这个页面将采用对CSS支持更好的布局,而若是没有,则采用兼容以前的布局方式。这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。react

区别:jquery

整体会有布局、样式解析和脚本执行三个方面的区别。

盒模型:在W3C标准中,若是设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在Quirks 模式下,IE的宽度和高度还包含了padding和border。

 

设置行内元素的高宽:在Standards模式下,给<span>等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。

设置百分比的高度:在standards模式下,一个元素的高度是由其包含的内容来决定的,若是父元素没有设置百分比的高度,子元素设置一个百分比的高度是无效的用margin:0 auto设置水平居中:使用margin:0 auto在standards模式下能够使元素水平居中,但在quirks模式下却会失效。

(还有不少,答出什么不重要,关键是看他答出的这些是否是本身经验遇到的,仍是说都是看文章看的,甚至彻底不知道。)

四、div+css的布局较table布局有什么优势?

改版的时候更方便 只要改css文件。

页面加载速度更快、结构化清晰、页面显示简洁。

表现与结构相分离。

易于优化(seo)搜索引擎更友好,排名更容易靠前。

五、 img的alt与title有何异同? strong与em的异同?

a:alt(alt text):为不能显示图像、窗体或applets的用户代理(UA),alt属性用来指定替换文字。替换文字的语言由lang属性指定。(在IE浏览器下会在没有title时把alt当成 tool tip显示)

title(tool tip):该属性为设置该属性的元素提供建议性的信息。

strong:粗体强调标签,强调,表示内容的重要性

em:斜体强调标签,更强烈强调,表示内容的强调点

六、你能描述一下渐进加强和优雅降级之间的不一样吗?

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

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

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

“优雅降级”观点

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

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

“渐进加强”观点

“渐进加强”观点则认为应关注于内容自己。

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

那么问题来了。如今产品经理看到IE6,7,8网页效果相对高版本现代浏览器少了不少圆角,阴影(CSS3),要求兼容(使用图片背景,放弃CSS3),你会如何说服他?

七、为何利用多个域名来存储网站资源会更有效?

CDN缓存更方便

突破浏览器并发限制

节约cookie带宽

节约主域名的链接数,优化页面响应速度

防止没必要要的安全问题

八、请谈一下你对网页标准和标准制定机构重要性的理解。

网页标准和标准制定机构都是为了能让web发展的更‘健康’,开发者遵循统一的标准,下降开发难度,开发成本,SEO也会更好作,也不会由于滥用代码致使各类BUG、安全问题,最终提升网站易用性。

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

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁。所以sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。

web storage和cookie的区别

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

除此以外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie须要前端开发者本身封装setCookie,getCookie。可是Cookie也是不能够或缺的:Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

十、简述一下src与href的区别。

src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。

src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。

<script src =”js.js”></script>

当浏览器解析到该元素时,会暂停其余资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,相似于将所指向资源嵌入当前标签内。这也是为何将js脚本放在底部而不是头部。

href是Hypertext Reference的缩写,指向网络资源所在位置,创建和当前元素(锚点)或当前文档(连接)之间的连接,若是咱们在文档中添加

<link href=”common.css” rel=”stylesheet”/>

那么浏览器会识别该文档为css文件,就会并行下载资源而且不会中止对当前文档的处理。这也是为何建议使用link方式来加载css,而不是使用@import方式。

十一、知道的网页制做会用到的图片格式有哪些?

png-8,png-24,jpeg,gif,svg。

可是上面的那些都不是面试官想要的最后答案。面试官但愿听到是Webp。(是否有关注新技术,新鲜事物)

科普一下Webp:WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。

在质量相同的状况下,WebP格式图像的体积要比JPEG格式图像小40%

十二、知道什么是微格式吗?谈谈理解。在前端构建中应该考虑微格式吗?

微格式(Microformats)是一种让机器可读的语义化XHTML词汇的集合,是结构化数据的开放标准。是为特殊应用而制定的特殊格式。

优势:将智能数据添加到网页上,让网站内容在搜索引擎结果界面能够显示额外的提示。(应用范例:豆瓣,有兴趣自行google)

1三、在css/js代码上线以后开发人员常常会优化性能,从用户刷新网页开始,一次js请求通常状况下有哪些地方会有缓存处理?

答案:dns缓存,cdn缓存,浏览器缓存,服务器缓存。

1四、一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。

图片懒加载,在页面上的未可视区域能够添加一个滚动条事件,判断图片位置与浏览器顶端的距离与页面的距离,若是前者小于后者,优先加载。

若是为幻灯片、相册等,能够使用图片预加载技术,将当前展现图片的前一张和后一张优先下载。

若是图片为css图片,能够使用CSSsprite,SVGsprite,Iconfont、Base64等技术。

若是图片过大,能够使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提升用户体验。

若是图片展现区域小于图片的真实大小,则因在服务器端根据业务须要先行进行图片压缩,图片压缩后大小与展现一致。

1五、你如何理解HTML结构的语义化? 

去掉或样式丢失的时候能让页面呈现清晰的结构:

html自己是没有表现的,咱们看到例如<h1>是粗体,字体大小2em,加粗;<strong>是加粗的,不要认为这是html的表现,这些其实html默认的css样式在起做用,因此去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优势,可是浏览器都有有默认样式,默认样式的目的也是为了更好的表达html的语义,能够说浏览器的默认样式和语义化的HTML结构是不可分割的。

屏幕阅读器(若是访客有视障)会彻底根据你的标记来“读”你的网页.

例如,若是你使用的含语义的标记,屏幕阅读器就会“逐个拼出”你的单词,而不是试着去对它完整发音.

PDA、手机等设备可能没法像普通电脑的浏览器同样来渲染网页(一般是由于这些设备对CSS的支持较弱)

使用语义标记能够确保这些设备以一种有意义的方式来渲染网页.理想状况下,观看设备的任务是符合设备自己的条件来渲染网页.

语义标记为设备提供了所需的相关信息,就省去了你本身去考虑全部可能的显示状况(包括现有的或者未来新的设备).例如,一部手机能够选择使一段标记了标题的文字以粗体显示.而掌上电脑可能会以比较大的字体来显示.不管哪一种方式一旦你对文本标记为标题,您就能够确信读取设备将根据其自身的条件来合适地显示页面.

搜索引擎的爬虫也依赖于标记来肯定上下文和各个关键字的权重

过去你可能尚未考虑搜索引擎的爬虫也是网站的“访客”,但如今它们他们其实是极其宝贵的用户.没有他们的话,搜索引擎将没法索引你的网站,而后通常用户将很难过来访问.

你的页面是否对爬虫容易理解很是重要,由于爬虫很大程度上会忽略用于表现的标记,而只注重语义标记.

所以,若是页面文件的标题被标记,而不是,那么这个页面在搜索结果的位置可能会比较靠后.除了提高易用性外,语义标记有利于正确使用CSS和JavaScript,由于其自己提供了许多“钩钩”来应用页面的样式与行为.

SEO主要仍是靠你网站的内容和外部连接的。

便于团队开发和维护

W3C给咱们定了一个很好的标准,在团队中你们都遵循这个标准,能够减小不少差别化的东西,方便开发和维护,提升开发效率,甚至实现模块化开发

1六、谈谈之前端角度出发作好SEO须要考虑什么?

了解搜索引擎如何抓取网页和如何索引网页

你须要知道一些搜索引擎的基本工做原理,各个搜索引擎之间的区别,搜索机器人(SE robot 或叫 web crawler)如何进行工做,搜索引擎如何对搜索结果进行排序等等。

Meta标签优化

主要包括主题(Title),网站描述(Description),和关键词(Keywords)。还有一些其它的隐藏文字好比Author(做者),Category(目录),Language(编码语种)等。

如何选取关键词并在网页中放置关键词

搜索就得用关键词。关键词分析和选择是SEO最重要的工做之一。首先要给网站肯定主关键词(通常在5个上下),而后针对这些关键词进行优化,包括关键词密度(Density),相关度(Relavancy),突出性(Prominency)等等。

了解主要的搜索引擎

虽然搜索引擎有不少,可是对网站流量起决定做用的就那么几个。好比英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不一样的搜索引擎对页面的抓取和索引、排序的规则都不同。还要了解各搜索门户和搜索引擎之间的关系,好比AOL网页搜索用的是Google的搜索技术,MSN用的是Bing的技术。

主要的互联网目录

Open Directory自身不是搜索引擎,而是一个大型的网站目录,他和搜索引擎的主要区别是网站内容的收集方式不一样。目录是人工编辑的,主要收录网站主页;搜索引擎是自动收集的,除了主页外还抓取大量的内容页面。

按点击付费的搜索引擎

搜索引擎也须要生存,随着互联网商务的愈来愈成熟,收费的搜索引擎也开始大行其道。最典型的有Overture和百度,固然也包括Google的广告项目Google Adwords。愈来愈多的人经过搜索引擎的点击广告来定位商业网站,这里面也大有优化和排名的学问,你得学会用最少的广告投入得到最多的点击。

搜索引擎登陆

网站作完了之后,别躺在那里等着客人从天而降。要让别人找到你,最简单的办法就是将网站提交(submit)到搜索引擎。若是你的是商业网站,主要的搜索引擎和目录都会要求你付费来得到收录(好比Yahoo要299美圆),可是好消息是(至少到目前为止)最大的搜索引擎Google目前仍是免费,并且它主宰着60%以上的搜索市场。

连接交换和连接普遍度(Link Popularity)

网页内容都是以超文本(Hypertext)的方式来互相连接的,网站之间也是如此。除了搜索引擎之外,人们也天天经过不一样网站之间的连接来Surfing(“冲浪”)。其它网站到你的网站的连接越多,你也就会得到更多的访问量。更重要的是,你的网站的外部连接数越多,会被搜索引擎认为它的重要性越大,从而给你更高的排名。

合理的标签使用

1七、有哪项方式能够对一个DOM设置它的CSS样式? 

外部样式表,引入一个外部css文件

内部样式表,将css代码放在 <head> 标签内部

内联样式,将css样式直接定义在 HTML 元素内部

1八、CSS都有哪些选择器?

派生选择器(用HTML标签申明)

id选择器(用DOM的ID申明)

类选择器(用一个样式类名申明)

属性选择器(用DOM的属性申明,属于CSS2,IE6不支持,不经常使用,不知道就算了)

除了前3种基本选择器,还有一些扩展选择器,包括

后代选择器(利用空格间隔,好比div .a{  })

群组选择器(利用逗号间隔,好比p,div,#a{  })

那么问题来了,CSS选择器的优先级是怎么样定义的?

基本原则:

通常而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。

复杂的计算方法:

用1表示派生选择器的优先级

用10表示类选择器的优先级

用100标示ID选择器的优先级

div.test1 .span var 优先级 1+10 +10 +1

span#xxx .songs li 优先级1+100 + 10 + 1

#xxx li 优先级 100 +1

那么问题来了,看下列代码,<p>标签内的文字是什么颜色的?

<style>

.classA{ color:blue;}

.classB{ color:red;}

</style>

<body>

<p class='classB classA'> 123 </p>

</body>

答案:red。与样式定义在文件中的前后顺序有关,便是后面的覆盖前面的,与在<p class=’classB classA’>中的前后关系无关。

1九、CSS中能够经过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?

最基本的:

设置display属性为none,或者设置visibility属性为hidden

技巧性:

设置宽高为0,设置透明度为0,设置z-index位置在-1000

20、超连接访问事后hover样式就不出现的问题是什么?如何解决?

答案:被点击访问过的超连接样式不在具备hover和active了,解决方法是改变CSS属性的排列顺序: L-V-H-A(link,visited,hover,active)

2一、什么是Css Hack?ie6,7,8的hack分别是什么?

答案:针对不一样的浏览器写不一样的CSS code的过程,就是CSS hack。

示例以下:

1

2

3

4

5

6

7

8

9

10

11

12

#test       {  

        width:300px;  

        height:300px;  

        background-color:blue;      /*firefox*/

        background-color:red\9;      /*all ie*/

        background-color:yellow;    /*ie8*/

        +background-color:pink;        /*ie7*/

        _background-color:orange;       /*ie6*/    } 

        :root #test { background-color:purple\9; }  /*ie9*/

    @media all and (min-width:0px){ #test {background-color:black;} }  /*opera*/

    @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }       /*chrome and safari*/

2二、请用Css写一个简单的幻灯片效果页面

答案:知道是要用css3。使用animation动画实现一个简单的幻灯片效果。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

/**HTML**/

        div.ani

        /**css**/

        .ani{

          width:480px;

          height:320px;

          margin:50px auto;

          overflow: hidden;

          box-shadow:0 0 5px rgba(0,0,0,1);

          background-size: cover;

          background-position: center;

          -webkit-animation-name: "loops";

          -webkit-animation-duration: 20s;

          -webkit-animation-iteration-count: infinite;

        }

        @-webkit-keyframes "loops" {

            0% {

                background:url(http://d.h、d3.jpg) no-repeat;            

            }

            25% {

                background:url(http://b.hiphotos.baidu.com/image/w%3D400/sig、f76094b364d72bceba1cc7cd98c109dd0.jpg) no-repeat;

            }

            50% {

                background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be、58e七、bb5b912.jpg) no-repeat;

            }

            75% {

                background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544095d61f0972cdda3cc7cd99e4b.jpg) no-repeat;

            }

            100% {

                background:url(http://c.hiphotos.baidu.com/image/2b21192138ad1.jpg) no-repeat;

            }

        }

2四、行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?

块级元素(block)特性:

老是独占一行,表现为另起一行开始,并且其后的元素也必须另起一行显示;

宽度(width)、高度(height)、内边距(padding)和外边距(margin)均可控制;

内联元素(inline)特性:

和相邻的内联元素在同一行;

宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变

(也就是padding和margin的left和right是能够设置的),就是里面文字或图片的大小。

那么问题来了,浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些?

答案:<input> 、<img> 、<button> 、<texterea> 、<label>。

2五、什么是外边距重叠?重叠的结果是什么?

外边距重叠就是margin-collapse。

在CSS当中,相邻的两个盒子(多是兄弟关系也多是祖先关系)的外边距能够结合成一个单独的外边距。这种合并外边距的方式被称为折叠,而且于是所结合成的外边距称为折叠外边距。

折叠结果遵循下列计算规则:

两个相邻的外边距都是正数时,折叠结果是它们二者之间较大的值。

两个相邻的外边距都是负数时,折叠结果是二者绝对值的较大值。

两个外边距一正一负时,折叠结果是二者的相加的和。

2六、rgba()和opacity的透明效果有什么不一样?

rgba()和opacity都能实现透明效果,但最大的不一样是opacity做用于元素,以及元素内的全部内容的透明度,

而rgba()只做用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)

2七、css中可让文字在垂直和水平方向上重叠的两个属性是什么?

垂直方向:line-height

水平方向:letter-spacing

那么问题来了,关于letter-spacing的妙用知道有哪些么?

答案:能够用于消除inline-block元素间的换行符空格间隙问题。

2八、如何垂直居中一个浮动元素?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

// 方法一:已知元素的高宽

#div1{

    background-color:#6699FF;

    width:200px;

    height:200px;

    position: absolute;        //父元素须要相对定位

    top: 50%;

    left: 50%;

    margin-top:-100px ;   //二分之一的height,width

    margin-left: -100px;

    }

 

//方法二:未知元素的高宽

 

  #div1{

    width: 200px;

    height: 200px;

    background-color: #6699FF;

 

    margin:auto;

    position: absolute;        //父元素须要相对定位

    left: 0;

    top: 0;

    right: 0;

    bottom: 0;

    }

那么问题来了,如何垂直居中一个<img>?(用更简便的方法。)

1

2

3

4

5

6

#container     //<img>的容器设置以下

{

    display:table-cell;

    text-align:center;

    vertical-align:middle;

}

2九、px和em的区别。

px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,而且em会继承父级元素的字体大小。

浏览器的默认字体高都是16px。因此未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

30、描述一个”reset”的CSS文件并如何使用它。知道normalize.css吗?你了解他们的不一样之处?

重置样式很是多,凡是一个前端开发人员确定有一个经常使用的重置CSS文件并知道如何使用它们。他们是盲目的在作仍是知道为何这么作呢?缘由是不一样的浏览器对一些元素有不一样的默认样式,若是你不处理,在不一样的浏览器下会存在必要的风险,或者更有戏剧性的性发生。

你可能会用Normalize来代替你的重置样式文件。它没有重置全部的样式风格,但仅提供了一套合理的默认样式值。既能让众多浏览器达到一致和合理,但又不扰乱其余的东西(如粗体的标题)。

在这一方面,没法作每个复位重置。它也确实有些超过一个重置,它处理了你永远都不用考虑的怪癖,像HTML的audio元素不一致或line-height不一致。

3一、Sass、LESS是什么?你们为何要使用他们?

他们是CSS预处理器。他是CSS上的一种抽象层。他们是一种特殊的语法/语言编译成CSS。

例如Less是一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既能够在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)。

为何要使用它们?

结构清晰,便于扩展。

能够方便地屏蔽浏览器私有语法差别。这个不用多说,封装对浏览器语法差别的重复处理,减小无心义的机械劳动。

能够轻松实现多重继承。

彻底兼容 CSS 代码,能够方便地应用到老项目中。LESS 只是在 CSS 语法上作了扩展,因此老的 CSS 代码也能够与 LESS 代码一同编译。

3二、display:none与visibility:hidden的区别是什么?

display : 隐藏对应的元素但不挤占该元素原来的空间。

visibility: 隐藏对应的元素而且挤占该元素原来的空间。

便是,使用CSS display:none属性后,HTML元素(对象)的宽度、高度等各类属性值都将“丢失”;而使用visibility:hidden属性后,HTML元素(对象)仅仅是在视觉上看不见(彻底透明),而它所占据的空间位置仍然存在。

3四、CSS中link和@import的区别是:

Link属于html标签,而@import是CSS中提供的

在页面加载的时候,link会同时被加载,而@import引用的CSS会在页面加载完成后才会加载引用的CSS

@import只有在ie5以上才能够被识别,而link是html标签,不存在浏览器兼容性问题

Link引入样式的权重大于@import的引用(@import是将引用的样式导入到当前的页面中)

3五、简介盒子模型:

CSS的盒子模型有两种:IE盒子模型、标准的W3C盒子模型模型

盒模型:内容、内边距、外边距(通常不计入盒子实际宽度)、边框

 

3六、为何要初始化样式?

因为浏览器兼容的问题,不一样的浏览器对标签的默认样式值不一样,若不初始化会形成不一样浏览器之间的显示差别

可是初始化CSS会对搜索引擎优化形成小影响

3七、BFC是什么?

BFC(块级格式化上下文),一个建立了新的BFC的盒子是独立布局的,盒子内元素的布局不会影响盒子外面的元素。在同一个BFC中的两个相邻的盒子在垂直方向发生margin重叠的问题

BFC是指浏览器中建立了一个独立的渲染区域,该区域内全部元素的布局不会影响到区域外元素的布局,这个渲染区域只对块级元素起做用

3八、html语义化是什么?

当页面样式加载失败的时候可以让页面呈现出清晰的结构

有利于seo优化,利于被搜索引擎收录(更便于搜索引擎的爬虫程序来识别)

便于项目的开发及维护,使html代码更具备可读性,便于其余设备解析。

3九、Doctype的做用?严格模式与混杂模式的区别?

<!DOCTYPE>用于告知浏览器该以何种模式来渲染文档

严格模式下:页面排版及JS解析是以该浏览器支持的最高标准来执行

混杂模式:不严格按照标准执行,主要用来兼容旧的浏览器,向后兼容

40、IE的双边距BUG:块级元素float后设置横向margin,ie6显示的margin比设置的较大。解决:加入_display:inline

4一、HTML与XHTML——两者有什么区别?

1. 全部的标记都必需要有一个相应的结束标记

2. 全部标签的元素和属性的名字都必须使用小写

3. 全部的 XML 标记都必须合理嵌套

4. 全部的属性必须用引号 "" 括起来

5. 把全部 < 和 & 特殊符号用编码表示

6. 给全部属性赋一个值

7. 不要在注释内容中使用 "--"

8. 图片必须有说明文字

4二、html常见兼容性问题?

1.双边距BUG float引发的  使用display

2.3像素问题 使用float引发的 使用dislpay:inline -3px 

3.超连接hover 点击后失效  使用正确的书写顺序 link visited hover active

4.Ie z-index问题 给父级添加position:relative

5.Png 透明 使用js代码 改

6.Min-height 最小高度 !Important 解决’

7.select 在ie6下遮盖 使用iframe嵌套

8.为何没有办法定义1px左右的宽度容器(IE6默认的行高形成的,使用over:hidden,zoom:0.08 line-height:1px)

9.IE5-8不支持opacity,解决办法:

.opacity {

    opacity: 0.4

    filter: alpha(opacity=60); /* for IE5-7 */

    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/

}

10. IE6不支持PNG透明背景,解决办法: IE6下使用gif图片

4三、对WEB标准以及W3C的理解与认识

答:标签闭合、标签小写、不乱嵌套、提升搜索机器人搜索概率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更普遍的设备所访问、更少的代码和组件,容易维 护、改版方便,不须要变更页面内容、提供打印版本而不须要复制内容、提升网站易用性。

4四、行内元素有哪些?块级元素有哪些?CSS的盒模型?

答:块级元素:div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
Css盒模型:内容,border ,margin,padding

4五、前端页面有哪三层构成,分别是什么?做用是什么?

答:结构层 Html 表示层 CSS 行为层 js。

4六、Doctype做用? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    (1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签以前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。

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

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

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

4七、行内元素有哪些?块级元素有哪些? 空(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>

4八、CSS的盒子模型?

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

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

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

50、如何居中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;相对定位

      background-color:pink;//方便看效果

      left:50%;

      top:50%;

    }

5一、浏览器的内核分别是什么?常常遇到的浏览器的兼容性有哪些?缘由,解决方法是什么,经常使用hack的技巧 ?

    * IE浏览器的内核Trident、 Mozilla的Gecko、google的WebKit、Opera内核Presto;

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

    * 浏览器默认的margin和padding不一样。解决方案是加一个全局的*{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游览器从全部状况中分离出来。

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

      css

          .bb{

           background-color:#f1ee18;/*全部识别*/

          .background-color:#00deff\9; /*IE六、七、8识别*/

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

          _background-color:#1e0bd1;/*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样式就不出现了 被点击访问过的超连接样式不在具备hover和active了解决方法是改变CSS属性的排列顺序:

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

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

  1. block 象块类型元素同样显示。

  none 缺省值。向行内元素类型同样显示。

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

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

  2. position的值

  *absolute

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

  *fixed (老IE不支持)

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

  * relative

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

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

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

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

5三、absolute的containing block计算方式跟正常流有什么不一样?

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

5五、对WEB标准以及W3C的理解与认识

标签闭合、标签小写、不乱嵌套、提升搜索机器人搜索概率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更普遍的设备所访问、更少的代码和组件,容易维 护、改版方便,不须要变更页面内容、提供打印版本而不须要复制内容、提升网站易用性;

5六、css的基本语句构成是?

选择器{属性1:值1;属性2:值2;……}

5七、浏览器标准模式和怪异模式之间的区别是什么?

盒子模型 渲染模式的不一样

使用 window.top.document.compatMode 可显示为何模式

5八、CSS中能够经过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?  

  最基本的:

  设置display属性为none,或者设置visibility属性为hidden

  技巧性:

  设置宽高为0,设置透明度为0,设置z-index位置在-1000

5九、超连接访问事后hover样式就不出现的问题是什么?如何解决?

  答案:被点击访问过的超连接样式不在具备hover和active了,解决方法是改变CSS属性的排列顺序: L-V-H-A(link,visited,hover,active)

60、什么是Css Hack?ie6,7,8的hack分别是什么?

  答案:针对不一样的浏览器写不一样的CSS code的过程,就是CSS hack。

  示例以下:

#test       {  

        width:300px;  

        height:300px;  

 

        background-color:blue;      /*firefox*/

        background-color:red\9;      /*all ie*/

        background-color:yellow\0;    /*ie8*/

        +background-color:pink;        /*ie7*/

        _background-color:orange;       /*ie6*/    } 

        :root #test { background-color:purple\9; }  /*ie9*/

    @media all and (min-width:0px){ #test {background-color:black\0;} }  /*opera*/

    @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }       /*chrome and safari*/

6二、请用Css写一个简单的幻灯片效果页面

  答案:知道是要用css3。使用animation动画实现一个简单的幻灯片效果。

/**HTML**/

        div.ani

        /**css**/

        .ani{

          width:480px;

          height:320px;

          margin:50px auto;

          overflow: hidden;

          box-shadow:0 0 5px rgba(0,0,0,1);

          background-size: cover;

          background-position: center;

          -webkit-animation-name: "loops";

          -webkit-animation-duration: 20s;

          -webkit-animation-iteration-count: infinite;

        }

        @-webkit-keyframes "loops" {

            0% { background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6adca964034f0fcdc3069fc27980/e824b899a9014c08e5e38ca4087b02087af4f4d3.jpg) no-repeat;            

            }

            25% {

                background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1572e9f81a4c2632edc9e72b6029/30adcbef76094b364d72bceba1cc7cd98c109dd0.jpg) no-repeat;

            }

            50% {

                background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be2353266255/d8f9d72a6059252d258e7605369b033b5bb5b912.jpg) no-repeat;

            }

            75% {

                background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544ebf86d71653fe9f9d736/0df431adcbef76095d61f0972cdda3cc7cd99e4b.jpg) no-repeat;

            }

            100% {

                background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb239ceb0fb43161a1f7b7a10a54642/3b87e950352ac65ce2e73f76f9f2b21192138ad1.jpg) no-repeat;

            }

        }

6三、行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?

  块级元素(block)特性:

  • 老是独占一行,表现为另起一行开始,并且其后的元素也必须另起一行显示;
  • 宽度(width)、高度(height)、内边距(padding)和外边距(margin)均可控制;

  内联元素(inline)特性:

  • 和相邻的内联元素在同一行;
  • 宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变(也就是padding和margin的left和right是能够设置的),就是里面文字或图片的大小。

  那么问题来了,浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些

  答案:<input> 、<img> 、<button> 、<textarea> 、<label>

6四、什么是外边距重叠?重叠的结果是什么?

  答案:

  外边距重叠就是margin-collapse。

  在CSS当中,相邻的两个盒子(多是兄弟关系也多是祖先关系)的外边距能够结合成一个单独的外边距。这种合并外边距的方式被称为折叠,而且于是所结合成的外边距称为折叠外边距。

  折叠结果遵循下列计算规则:

  1. 两个相邻的外边距都是正数时,折叠结果是它们二者之间较大的值。
  2. 两个相邻的外边距都是负数时,折叠结果是二者绝对值的较大值。
  3. 两个外边距一正一负时,折叠结果是二者的相加的和。

  

6五、rgba()和opacity的透明效果有什么不一样?

  rgba()和opacity都能实现透明效果,但最大的不一样是opacity做用于元素,以及元素内的全部内容的透明度,

  而rgba()只做用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)

6六、css中可让文字在垂直和水平方向上重叠的两个属性是什么?

  垂直方向:line-height

  水平方向:letter-spacing

  那么问题来了,关于letter-spacing的妙用知道有哪些么?

  答案:能够用于消除inline-block元素间的换行符空格间隙问题。

6七、如何垂直居中一个浮动元素?

// 方法一:已知元素的高宽

#div1{

    background-color:#6699FF;

    width:200px;

    height:200px;

    position: absolute;        //父元素须要相对定位

    top: 50%;

    left: 50%;

    margin-top:-100px ;   //二分之一的height,width

    margin-left: -100px;

    }

//方法二:未知元素的高宽

  #div1{

    width: 200px;

    height: 200px;

    background-color: #6699FF;

    margin:auto;

    position: absolute;        //父元素须要相对定位

    left: 0;

    top: 0;

    right: 0;

    bottom: 0;

    }

那么问题来了,如何垂直居中一个<img>?(用更简便的方法。)

#container     //<img>的容器设置以下

{

    display:table-cell;

    text-align:center;

    vertical-align:middle;

}

6八、描述一个"reset"的CSS文件并如何使用它。知道normalize.css吗?你了解他们的不一样之处? 

  重置样式很是多,凡是一个前端开发人员确定有一个经常使用的重置CSS文件并知道如何使用它们。他们是盲目的在作仍是知道为何这么作呢?缘由是不一样的浏览器对一些元素有不一样的默认样式,若是你不处理,在不一样的浏览器下会存在必要的风险,或者更有戏剧性的性发生。

  你可能会用Normalize来代替你的重置样式文件。它没有重置全部的样式风格,但仅提供了一套合理的默认样式值。既能让众多浏览器达到一致和合理,但又不扰乱其余的东西(如粗体的标题)。

  在这一方面,没法作每个复位重置。它也确实有些超过一个重置,它处理了你永远都不用考虑的怪癖,像HTML的audio元素不一致或line-height不一致。

6九、说display属性有哪些?能够作什么?

display:block行内元素转换为块级元素

  display:inline块级元素转换为行内元素

  display:inline-block转为内联元素

70、哪些css属性能够继承?

可继承: font-size font-family color, ul li dl dd dt;

  不可继承 :border padding margin width height ;

7一、css优先级算法如何计算?

!important >  id > class > 标签

  !important 比 内联优先级高

  *优先级就近原则,样式定义最近者为准;

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

7二、b标签和strong标签,i标签和em标签的区别?

后者有语义,前者则无。

7三、有那些行内元素、有哪些块级元素、盒模型?

1.内联元素(inline element)

a – 锚点

abbr – 缩写

acronym – 首字

b – 粗体(不推荐)

big – 大字体

br – 换行

em – 强调

font – 字体设定(不推荐)

i – 斜体

img – 图片

input – 输入框

label – 表格标签

s – 中划线(不推荐)

select – 项目选择

small – 小字体文本

span – 经常使用内联容器,定义文本内区块

strike – 中划线

strong – 粗体强调

sub – 下标

sup – 上标

textarea – 多行文本输入框

tt – 电传文本

u – 下划线

var – 定义变量

二、块级元素

address – 地址

blockquote – 块引用

center – 举中对齐块

dir – 目录列表

div – 经常使用块级容易,也是css layout的主要标签

dl – 定义列表

fieldset – form控制组

form – 交互表单

h1 – 大标题

h2 – 副标题

h3 – 3级标题

h4 – 4级标题

h5 – 5级标题

h6 – 6级标题

hr – 水平分隔线

isindex – input prompt

menu – 菜单列表

noframes – frames可选内容,(对于不支持frame的浏览器显示此区块内容)

noscript – )可选脚本内容(对于不支持script的浏览器显示此内容)

ol – 排序表单

p – 段落

pre – 格式化文本

table – 表格

ul – 非排序列表

3.CSS盒子模型包含四个部分组成:

内容、填充(padding)、边框(border)、外边界(margin)。

7四、有哪些选择符,优先级的计算公式是什么?行内样式和!important哪一个优先级高?

#ID > .class > 标签选择符  !important优先级高

75.我想让行内元素跟上面的元素距离10px,加margin-top和padding-top能够吗?

  margin-top,padding-top无效

76.CSS的盒模型由什么组成?

  内容,border ,margin,padding

7七、.说说display属性有哪些?能够作什么?

  display:block行内元素转换为块级元素

  display:inline块级元素转换为行内元素

  display:inline-block转为内联元素

7八、哪些css属性能够继承?

  可继承: font-size font-family color, ul li dl dd dt;

  不可继承 :border padding margin width height ;

7九、css优先级算法如何计算?

  !important >  id > class > 标签

  !important 比 内联优先级高

  * 优先级就近原则,样式定义最近者为准;

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

80、text-align:center和line-height有什么区别?

  text-align是水平对齐,line-height是行间。

8一、前端页面由哪三层构成,分别是什么?做用是什么?

   结构层 Html 表示层 CSS 行为层 js

8二、写一个表格以及对应的CSS,使表格奇数行为白色背景,偶数行为灰色,鼠标一上去为黄色背景。

2、JS基础

一、javascript的typeof返回哪些数据类型

Object number function boolean underfind

二、例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)

隐式(== – ===)

三、split() join() 的区别

前者是切割成数组的形式,后者是将数组转换成字符串

四、数组方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部删除

Unshift()头部添加 shift()头部删除

五、事件绑定和普通事件有什么区别

事件绑定是指把事件注册到具体的元素之上,普通事件指的是能够用来注册的事件

六、IE和DOM事件流的区别

1.执行顺序不同、

2.参数不同

3.事件加不加on

4.this指向问题

七、IE和标准下有哪些兼容性的写法

Var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidth

Var target = ev.srcElement||ev.target

八、call和apply的区别

Object.call(this,obj1,obj2,obj3)

Object.apply(this,arguments)

九、b继承a的方法

十、JavaScript this指针、闭包、做用域

十一、事件委托是什么

让利用事件冒泡的原理,让本身的所触发的事件,让他的父元素代替执行!

十二、闭包是什么,有什么特性,对页面有什么影响

闭包就是可以读取其余函数内部变量的函数。

1三、如何阻止事件冒泡和默认事件

canceBubble return false

1四、添加 删除 替换 插入到某个接点的方法

obj.appendChidl()

obj.innersetBefore

obj.replaceChild

obj.removeChild

1五、javascript的本地对象,内置对象和宿主对象

本地对象为array obj regexp等能够new实例化

内置对象为gload Math 等不能够实例化的

宿主为浏览器自带的document,window 等

1六、document load 和document ready的区别

Document.onload 是在结构和样式加载完才执行js

Document.ready原生种没有这个方法,jquery中有 $().ready(function)

1七、”==”和“===”的不一样

前者会自动转换类型

后者不会

1八、javascript的同源策略

一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、议和端口号的组合

1九、编写一个数组去重的方法

function oSort(arr) {   
var result ={};
var newArr=[];
for(var i=0;i<arr.length;i++){
if(!result[arr]) {
newArr.push(arr)
result[arr]=1
}
}
return newArr
}</arr.length;i++)

20、JavaScript是一门什么样的语言,它有哪些特色?

没有标准答案。

2一、JavaScript的数据类型都有什么?

基本数据类型:String,boolean,Number,Undefined, Null

引用数据类型:Object(Array,Date,RegExp,Function)

那么问题来了,如何判断某变量是否为数组数据类型?

方法一.判断其是否具备“数组性质”,如slice()方法。可本身给该变量定义slice方法,故有时会失效

方法二.obj instanceof Array 在某些IE版本中不正确

方法三.方法一二皆有漏洞,在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性,最好的方法以下:

 

 

 

 

 

 

if(typeof Array.isArray==="undefined"){

  Array.isArray = function(arg){

        return Object.prototype.toString.call(arg)==="[object Array]"

    }; 

}

2二、已知ID的Input输入框,但愿获取这个输入框的输入值,怎么作?(不使用第三方框架)

 

document.getElementById(“ID”).value

2三、但愿获取到页面中全部的checkbox怎么作?(不使用第三方框架)

 

 

 

 

 

 

 

 

var domList = document.getElementsByTagName(‘input’)

var checkBoxList = [];

var len = domList.length;  //缓存到局部变量

while (len--) {  //使用while的效率会比for循环更高

  if (domList[len].type == ‘checkbox’) {

      checkBoxList.push(domList[len]);

  }

}

2四、设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)

 

 

 

var dom = document.getElementById(“ID”);

dom.innerHTML = “xxxx”

dom.style.color = “#000”

2五、当一个DOM节点被点击时候,咱们但愿可以执行一个函数,应该怎么作?

直接在DOM里绑定事件:<div οnclick=”test()”></div>

在JS里经过onclick绑定:xxx.onclick = test

经过事件添加进行绑定:addEventListener(xxx, ‘click’, test)

那么问题来了,Javascript的事件流模型都有什么?

“事件冒泡”:事件开始由最具体的元素接受,而后逐级向上传播

“事件捕捉”:事件由最不具体的节点先接收,而后逐级向下,一直到最具体的

“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡

2六、看下列代码输出为什么?解释缘由。

 

 

 

var a;

alert(typeof a); // undefined

alert(b); // 报错

解释:Undefined是一个只有一个值的数据类型,这个值就是“undefined”,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b因为未声明将报错。注意未申明的变量和声明了未赋值的是不同的。

2七、看下列代码,输出什么?解释缘由。

 

 

var a = null;

alert(typeof a); //object

解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,因此用typeof检测会返回”object”。

2八、看下列代码,输出什么?解释缘由。

 

 

 

 

 

 

 

 

 

var undefined;

undefined == null; // true

1 == true;   // true

2 == true;   // false

0 == false;  // true

0 == '';     // true

NaN == NaN;  // false

[] == false; // true

[] == ![];   // true

  • undefined与null相等,但不恒等(===)

一个是number一个是string时,会尝试将string转换为number

尝试将boolean转换为number,0或1

尝试将Object转换成number或string,取决于另一个对比量的类型

因此,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。

那么问题来了,看下面的代码,输出什么,foo的值为何?

 

 

 

var foo = "11"+2-"1";

console.log(foo);

console.log(typeof foo);

执行完后foo的值为111,foo的类型为String。

2九、看代码给答案。

 

 

 

 

 

var a = new Object();

a.value = 1;

b = a;

b.value = 2;

alert(a.value);

答案:2(考察引用数据类型细节)

30、已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。

答案:alert(stringArray.join(“”))

已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。

 

 

 

 

 

 

 

 

function combo(msg){

    var arr=msg.split("-");

    for(var i=1;i<arr.length;i++){

        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

    }

    msg=arr.join("");

    return msg;

}

(考察基础API)

3一、var numberArray = [3,6,2,4,1,5]; (考察基础API)

1) 实现对该数组的倒排,输出[5,1,4,2,6,3]

2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]

 

 

 

 

 

 

 

 

function combo(msg){

    var arr=msg.split("-");

    for(var i=1;i<arr.length;i++){

        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

    }

    msg=arr.join("");

    return msg;

}

3二、输出今天的日期,以YYYY-MM-DD的方式,好比今天是2014年9月26日,则输出2014-09-26

 

 

 

 

 

 

 

 

 

 

 

var d = new Date();

// 获取年,getFullYear()返回4位的数字

var year = d.getFullYear();

// 获取月,月份比较特殊,0是1月,11是12月

var month = d.getMonth() + 1;

// 变成两位

month = month < 10 ? '0' + month : month;

// 获取日

var day = d.getDate();

day = day < 10 ? '0' + day : day;

alert(year + '-' + month + '-' + day);

3三、将字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替换成10,{$name}替换成Tony (使用正则表达式)

答案:”<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>”.replace(/{\$id}/g, ’10′).replace(/{\$name}/g, ‘Tony’);

3四、为了保证页面输出安全,咱们常常须要对一些特殊的字符进行转义,请写一个函数escapeHtml,将<, >, &, “进行转义

 

function escapeHtml(str) {

return str.replace(/[<>”&]/g, function(match) {

    switch (match) {

     case “<”:

         return “&lt;”;

     case “>”:

       return “&gt;”;

     case “&”:

       return “&amp;”;

     case “\””:

        return “&quot;”;

    }

  });

}

3五、foo = foo||bar ,这行代码是什么意思?为何要这样写?

答案:if(!foo) foo = bar; //若是foo存在,值不变,不然把bar的值赋给foo。

短路表达式:做为”&&”和”||”操做符的操做数表达式,这些表达式在进行求值时,只要最终的结果已经能够肯定是真或假,求值过程便了结止,这称之为短路求值。

3六、看下列代码,将会输出什么?(变量声明提高)

 

 

 

 

 

 

var foo = 1;

function(){

    console.log(foo);

    var foo = 2;

    console.log(foo);

}

答案:输出undefined 和 2。上面代码至关于:

 

 

 

 

 

 

 

var foo = 1;

function(){

    var foo;

    console.log(foo); //undefined

    foo = 2;

    console.log(foo); // 2;  

}

函数声明与变量声明会被JavaScript引擎隐式地提高到当前做用域的顶部,可是只提高名称不会提高赋值部分。

3七、用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。

 

 

 

 

 

 

 

 

 

var iArray = [];

funtion getRandom(istart, iend){

        var iChoice = iend - istart +1;

        return Math.floor(Math.random() * iChoice + istart;

}

for(var i=0; i<10; i++){

        iArray.push(getRandom(10,100));

}

iArray.sort();

3八、把两个数组合并,并删除第二个元素。

 

 

 

 

var array1 = ['a','b','c'];

var bArray = ['d','e','f'];

var cArray = array1.concat(bArray);

cArray.splice(1,1);

3九、怎样添加、移除、移动、复制、建立和查找节点(原生JS,实在基础,没细写每一步)

1)建立新节点

createDocumentFragment()    //建立一个DOM片断

createElement()   //建立一个具体的元素

createTextNode()   //建立一个文本节点

2)添加、移除、替换、插入

appendChild()      //添加

removeChild()      //移除

replaceChild()      //替换

insertBefore()      //插入

3)查找

getElementsByTagName()    //经过标签名称

getElementsByName()     //经过元素的Name属性的值

getElementById()        //经过元素Id,惟一性

40、有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不肯定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。

答案:

 

 

 

 

 

 

 

 

 

function serilizeUrl(url) {

    var result = {};

    url = url.split("?")[1];

    var map = url.split("&");

    for(var i = 0, len = map.length; i < len; i++) {

        result<script>jQuery(function($) {$("#google-maps-1").gMap({controls: false,scrollwheel: false,markers: [{address: "",icon: {image: "http://blog.jobbole.com/wp-content/themes/jobboleblogv3/_assets/img/_colors/red/pin.png",iconsize: [32, 32],iconanchor: [16,27],infowindowanchor: [16, 27]}}],address: "",zoom: 15,icon: {image: "http://blog.jobbole.com/wp-content/themes/jobboleblogv3/_assets/img/_colors/red/pin.png",iconsize: [32, 32],iconanchor: [16,27],infowindowanchor: [16, 27]}});});</script><div id="google-maps-1" class="google-maps" style="width: 100%; height: 200px;"></div>.split("=")[0]] = map[i].split("=")[1];

    }

    return result;

}

4一、正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不一样?匹配邮箱的正则表达式?

答案:当使用RegExp()构造函数的时候,不只须要转义引号(即\”表示”),而且还须要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。 

邮箱的正则匹配:

 

var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

24.看下面代码,给出输出结果。

 

 

 

 

 

for(var i=1;i<=3;i++){

  setTimeout(function(){

      console.log(i);   

  },0); 

};

答案:4 4 4。

缘由:Javascript事件处理器在线程空闲以前不会运行。追问,如何让上述代码输出1 2 3?

 

 

 

 

 

 

 

 

for(var i=1;i<=3;i++){

   setTimeout((function(a){  //改为当即执行函数

       console.log(a);   

   })(i),0); 

};

1           //输出

2

3

4二、写一个function,清除字符串先后的空格。(兼容全部浏览器)

使用自带接口trim(),考虑兼容性:

 

if (!String.prototype.trim) {

 String.prototype.trim = function() {

 return this.replace(/^\s+/, "").replace(/\s+$/,"");

 }

}

 // test the function

var str = " \t\n test string ".trim();

alert(str == "test string"); // alerts "true"

4三、Javascript中callee和caller的做用?

caller是返回一个对函数的引用,该函数调用了当前函数;

callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

那么问题来了?若是一对兔子每个月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子?(使用callee完成)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var result=[];

function fn(n){  //典型的斐波那契数列

   if(n==1){

        return 1;

   }else if(n==2){

           return 1;

   }else{

        if(result[n]){

                return result[n];

        }else{

                //argument.callee()表示fn()

                result[n]=arguments.callee(n-1)+arguments.callee(n-2);

                return result[n];

        }

   }

}

4四、Javascript中, 如下哪条语句必定会产生运行错误?      答案(  B   )

A、   var _变量=NaN;B、var 0bj = [];C、var obj = //;  D、var obj = {};

4五、如下两个变量a和b,a+b的哪一个结果是NaN?      答案(   C  )

A、var a=undefind; b=NaN

B、var a=‘123’; b=NaN

C、var a =undefined , b =NaN

D、var a=NaN , b='undefined'

4六、var a=10; b=20; c=4;  ++b+c+a++ 如下哪一个结果是正确的?答案(  B  )

A、   34   B、35  C、36  D、37

4七、下面的JavaScript语句中,( D )实现检索当前页面中的表单元素中的全部文本框,并将它们所有清空

A. for(vari=0;i< form1.elements.length;i++) {

if(form1.elements.type==”text”)

form1.elements.value=”";}

B. for(vari=0;i<document.forms.length;i++) {

if(forms[0].elements.type==”text”)

forms[0].elements.value=”";

}

C. if(document.form.elements.type==”text”)

form.elements.value=”";

D. for(vari=0;i<document.forms.length; i++){

for(var j=0;j<document.forms.elements.length; j++){

if(document.forms.elements[j].type==”text”)

document.forms.elements[j].value=”";

}

}

4八、要将页面的状态栏中显示“已经选中该文本框”,下列JavaScript语句正确的是( A )

A. window.status=”已经选中该文本框”

B. document.status=”已经选中该文本框”

C. window.screen=”已经选中该文本框”

D. document.screen=”已经选中该文本框”

4九、如下哪条语句会产生运行错误:(A)

A.var obj = ();

B.var obj = [];

C.var obj = {};

D.var obj = //;

50、如下哪一个单词不属于javascript保留字:(B)

A.with

B.parent

C.class

D.void

5一、请选择结果为真的表达式:(C)

A.null instanceof Object

B.null === undefined

C.null == undefined

D.NaN == NaN

5二、Javascript中, 若是已知HTML页面中的某标签对象的id=”username”,用____document.getElementById(‘username’)___ _方法得到该标签对象。

5三、typeof运算符返回值中有一个跟javascript数据类型不一致,它是________”function”_________。

5四、定义了一个变量,但没有为该变量赋值,若是alert该变量,javascript弹出的对话框中显示___undefined______ 。

5五、分析代码,得出正确的结果。

var a=10, b=20 , c=30;

++a;

a++;

e=++a+(++b)+(c++)+a++;

alert(e);

弹出提示对话框:77

5六、写出函数DateDemo的返回结果,系统时间假定为今天

function DateDemo(){

 var d, s="今天日期是:";

 d = new Date();

s += d.getMonth() + "/";

s += d.getDate() + "/";

s += d.getYear();

return s;}

结果:今天日期是:7/17/2010

5七、写出程序运行的结果?

for(i=0, j=0; i<10, j<6; i++, j++){

k = i + j;}

结果:10

5八、阅读如下代码,请分析出结果:

    var arr = new Array(1 ,3 ,5);

    arr[4]='z';

    arr2 = arr.reverse();

    arr3 = arr.concat(arr2);

    alert(arr3);

弹出提示对话框:z,,5,3,1,z,,5,3,1

5九、补充按钮事件的函数,确认用户是否退出当前页面,确认以后关闭窗口; <html>

<head>

<script type=”text/javascript” >

function closeWin(){

//在此处添加代码

if(confirm(“肯定要退出吗?”)){

window.close();

}

}

</script>

</head>

<body>

<input type=”button”value=”关闭窗口”οnclick=”closeWin()”/>

</body>

</html>

60、写出简单描述html标签(不带属性的开始标签和结束标签)的正则表达式,并将如下字符串中的html标签去除掉

var str = “<div>这里是div<p>里面的段落</p></div>”;

//

<scripttype=”text/javascript”>

varreg = /<\/?\w+\/?>/gi;

varstr = “<div>这里是div<p>里面的段落</p></div>”;

alert(str.replace(reg,”"));

</script>

6一、完成foo()函数的内容,要求可以弹出对话框提示当前选中的是第几个单选框。

<html>

<head>

<metahttp-equiv=”Content-Type” content=”text/html;charset=utf-8″ />

</head>

<body>

<script type=”text/javascript” >

function foo() {

//在此处添加代码

var rdo =document.form1.radioGroup;

for(var i =0 ;i<rdo.length;i++){

if(rdo.checked){

alert(“您选择的是第”+(i+1)+”个单选框”);

}

}

}

</script>

<body>

<form name=”form1″ >

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”submit”/>

</form>

</body>

</html>

6二、完成函数showImg(),要求可以动态根据下拉列表的选项变化,更新图片的显示

<body>

<script type=”text/javascript” >

function showImg (oSel) {

//在此处添加代码

var str = oSel.value;

document.getElementById(“pic”).src= str+”.jpg”;

}

</script>

<img id=”pic”src=”img1.jpg”width=”200″ height=”200″ />

<br />

<select id=”sel”>

<option value=”img1“>城市生活</option>

<option value=”img2“>都市早报</option>

<option value=”img3“>青山绿水</option>

</select></body>

6三、截取字符串abcdefg的efg

alert('abcdefg'.substring(4));

6四、列举浏览器对象模型BOM里经常使用的至少4个对象,并列举window对象的经常使用方法至少5个

对象:Window document location screen history navigator

方法:Alert() confirm() prompt() open() close()

6五、简述列举文档对象模型DOM里document的经常使用的查找访问节点的方法并作简单说明

Document.getElementById 根据元素id查找元素

Document.getElementByName 根据元素name查找元素

Document.getElementTagName 根据指定的元素名查找元素

6六、但愿获取到页面中全部的checkbox怎么作?(不使用第三方框架)

var domList = document.getElementsByTagName(‘input’)

var checkBoxList = [];

var len = domList.length;  //缓存到局部变量

while (len--) {  //使用while的效率会比for循环更高

  if (domList[len].type == ‘checkbox’) {

      checkBoxList.push(domList[len]);

  }

}

6七、JavaScript的数据类型都有什么?

基本数据类型:String,Boolean,Number,Undefined,Null

引用数据类型:Object(Array,Date,RegEx p,Function)

6八、javascript中有哪几种数据类型,分别写出中文和英文。

string boolean number null undefined object

字符串 布尔 数值 空值 未定义 对象

6九、javascript中==和===的区别是什么?举例说明。

===会自动进行类型转换,==不会

70、简述建立函数的几种方式

第一种(函数声明):

function sum1(num1,num2){

   return num1+num2;

}

第二种(函数表达式):

var sum2 = function(num1,num2){

   return num1+num2;

}

第三种(函数对象方式):

var sum3 = new Function("num1","num2","return num1+num2");

7一、Javascript如何实现继承?

原型链继承,借用构造函数继承,组合继承,寄生式继承,寄生组合继承

7二、Javascript建立对象的几种方式?

工厂方式,构造函数方式,原型模式,混合构造函数原型模式,动态原型方式

7三、把 Script 标签 放在页面的最底部的body封闭以前 和封闭以后有什么区别?浏览器会如何解析它们?

7四、iframe的优缺点?

优势:

1. 解决加载缓慢的第三方内容如图标和广告等的加载问题

2. Security sandbox

3. 并行加载脚本

缺点:

1. iframe会阻塞主页面的Onload事件

2. 即时内容为空,加载也须要时间

3. 没有语意

7五、请你谈谈Cookie的弊端?

缺点:

1.`Cookie`数量和长度的限制。每一个domain最多只能有20条cookie,每一个cookie长度不能超过4KB,不然会被截掉。

2.安全性问题。若是cookie被人拦截了,那人就能够取得全部的session信息。即便加密也与事无补,由于拦截者并不须要知道cookie的意义,他只要原样转发cookie就能够达到目的了。

3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,咱们须要在服务器端保存一个计数器。若是咱们把这个计数器保存在客户端,那么它起不到任何做用。

7六、DOM操做——怎样添加、移除、移动、复制、建立和查找节点。

1. 建立新节点

createDocumentFragment() // 建立一个DOM片断

createElement() // 建立一个具体的元素

createTextNode() // 建立一个文本节点

2. 添加、移除、替换、插入

appendChild()

removeChild()

replaceChild()

insertBefore() // 在已有的子节点前插入一个新的子节点

3. 查找

getElementsByTagName() // 经过标签名称

getElementsByName() // 经过元素的Name属性的值(IE容错能力较强,会获得一个数组,其中包括id等于name值的)

getElementById() // 经过元素Id,惟一性

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

1. defer和async

2. 动态建立DOM方式(建立script,插入到DOM中,加载完毕后callBack)

3. 按需异步载入js

7八、documen.write和 innerHTML 的区别?

document.write 只能重绘整个页面

innerHTML 能够重绘页面的一部分

7九、哪些操做会形成内存泄漏?

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

垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。

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

2. 闭包

3. 控制台日志

4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

80、javascript的typeof返回哪些数据类型?

答:object、 number、 function 、boolean、 underfind

8一、split() join() 的区别

答:前者是切割成数组的形式,后者是将数组转换成字符串

8二、数组方法pop() push() unshift() shift()各表示什么意思?

答:Push()尾部添加、pop()尾部删除、Unshift()头部添加、shift()头部删除

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

答:var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
        if(!json[str.charAt(i)]){
                json[str.charAt(i)] = 1;
        }else{
                json[str.charAt(i)]++;
        }
};
var iMax = 0;
var iIndex = '';
for(var i in json){
        if(json[i]>iMax){
                iMax = json[i];
                iIndex = i;
        }
}
alert('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

8四、javascript的typeof返回哪些数据类型

Object number function boolean underfind

8五、例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)

隐式(== – ===)

8六、split() join() 的区别

前者是切割成数组的形式,后者是将数组转换成字符串

8七、数组方法pop() push() unshift() shift()

Push()尾部添加 shift() 尾部删除

Unshift() 头部添加 shift() 头部删除

8八、事件绑定和普通事件有什么区别

事件绑定和普通事件有什么区别

8九、IE和DOM事件流的区别

1.执行顺序不同、

2.参数不同

3.事件加不加on

4.this指向问题

90、IE和标准下有哪些兼容性的写法

Var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidth

Var target = ev.srcElement||ev.target

9一、call和apply的区别

Object.call(this,obj1,obj2,obj3)

Object.apply(this,arguments)

9二、b继承a的方法

9三、写一个获取非行间样式的函数

function getStyle(obj,attr,value)

{

  if(!value)

  {

      if(obj.currentStyle)

      {

          return obj.currentStyle(attr);

      }

      else{

          obj.getComputedStyle(attr,false);

      }

  }       

  else

  {

      obj.style[attr] = value;

  }

}

9四、事件委托是什么

让利用事件冒泡的原理,让本身的所触发的事件,让他的父元素代替执行!

http://www.webasily.com/?p=78 例子可见此连接

事件委托是什么

9五、闭包是什么,有什么特性,对页面有什么影响

闭包就是可以读取其余函数内部变量的函数。

http://blog.csdn.net/gaoshanwudi/article/details/7355794 此连接可查看(问这个问题的不是一个公司)

9六、解释jsonp的原理,以及为何不是真正的ajax

动态建立script标签,回调函数

Ajax是页面无刷新请求数据操做

9七、javascript的本地对象,内置对象和宿主对象

本地对象为array obj regexp等能够new实例化

内置对象为gload Math 等不能够实例化的

宿主为浏览器自带的document,window 等

9八、document load 和document ready的区别

Document.onload 是在结构和样式加载完才执行js

Document.ready原生种没有这个方法,jquery中有 $().ready(function)

9九、字符串反转,如将 '12345678' 变成 '87654321'

 

//大牛作法;

//思路:先将字符串转换为数组 split(),利用数组的反序函数 reverse()颠倒数组,再利用 jion() 转换为字符串

var str = '12345678';

str = str.split('').reverse().join('');

100、将数字 12345678 转化成 RMB形式 如: 12,345,678 

 

//我的方法;

//思路:先将数字转为字符, str= str + '' ;

//利用反转函数,每三位字符加一个 ','最后一位不加; re()是自定义的反转函数,最后再反转回去!

for(var i = 1; i <= re(str).length; i++){

    tmp += re(str)[i - 1];

    if(i % 3 == 0 && i != re(str).length){

        tmp += ',';

    }

}

10一、生成5个不一样的随机数;

 

//思路:5个不一样的数,每生成一次就和前面的全部数字相比较,若是有相同的,则放弃当前生成的数字!

var num1 = [];

for(var i = 0; i < 5; i++){

    num1[i] = Math.floor(Math.random()*10) + 1; //范围是 [1, 10]

    for(var j = 0; j < i; j++){

        if(num1[i] == num1[j]){

            i--;

        }

    }

}

10二、去掉数组中重复的数字 方法一;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//思路:每遍历一次就和以前的全部作比较,不相等则放入新的数组中!

//这里用的原型 我的作法;

Array.prototype.unique = function(){

    var len = this.length,

        newArr = [],

        flag = 1;

    for(var i = 0; i < len; i++, flag = 1){

        for(var j = 0; j < i; j++){

            if(this[i] == this[j]){

                flag = 0;        //找到相同的数字后,不执行添加数据

            }

        }

        flag ? newArr.push(this[i]) : '';

    }

    return newArr;

}

    方法二:

 

(function(arr){

    var len = arr.length,

        newArr = [], 

        flag;

    for(var i = 0; i < len; i+=1, flag = 1){

        for(var j = 0; j < i; j++){

            if(arr[i] == arr[j]){

                flag = 0;

            }  

        }

        flag?newArr.push(arr[i]):'';

    }

    alert(newArr);

})([1, 1, 22, 3, 4, 55, 66]);

 

10三、阶乘函数;

 

//原型方法

Number.prototype.N = function(){

    var re = 1;

    for(var i = 1; i <= this; i++){

        re *= i;

    }

    return re;

}

var num = 5;

alert(num.N());

10四、window.location.search() 返回的是什么?

    答:查询(参数)部分。除了给动态语言赋值之外,咱们一样能够给静态页面,并使用javascript来得到相信应的参数值

        返回值:?ver=1.0&id=timlq 也就是问号后面的!

10五、window.location.hash 返回的是什么?

    答:锚点 , 返回值:#love ;

10六、window.location.reload() 做用?

    答:刷新当前页面。

10七、阻止冒泡函数

 

function stopPropagation(e) {  

    e = e || window.event;  

    if(e.stopPropagation) { //W3C阻止冒泡方法  

        e.stopPropagation();  

    } else {  

        e.cancelBubble = true; //IE阻止冒泡方法  

    }  

}  

document.getElementById('need_hide').onclick = function(e) {  

    stopPropagation(e);  

}

10八、什么是闭包? 写一个简单的闭包?;

    答:个人理解是,闭包就是可以读取其余函数内部变量的函数。在本质上,闭包就是将函数内部和函数外部链接起来的一座桥梁。

 

function outer(){

    var num = 1;

    function inner(){

        var n = 2;

        alert(n + num);

    }

    return inner;

}

outer()();

10九、javascript 中的垃圾回收机制?

    答:在Javascript中,若是一个对象再也不被引用,那么这个对象就会被GC回收。若是两个对象互相引用,而再也不  被第3者所引用,那么这两个互相引用的对象也会被回收。由于函数a被b引用,b又被a外的c引用,这就是为何  函数a执行后不会被回收的缘由。

1十、看题作答:

 

function f1(){

    var tmp = 1;

    this.x = 3;

    console.log(tmp);    //A

    console.log(this.x);     //B

}

var obj = new f1(); //1

console.log(obj.x)     //2

console.log(f1());        //3

    分析:    

        这道题让我从新认识了对象和函数,首先看代码(1),这里实例话化了 f1这个类。至关于执行了 f1函数。因此这个时候 A 会输出 1, 而 B 这个时候的 this 表明的是 实例化的当前对象 obj B 输出 3.。 代码(2)毋庸置疑会输出 3, 重点 代码(3)首先这里将再也不是一个类,它只是一个函数。那么 A输出 1, B呢?这里的this 表明的其实就是window对象,那么this.x 就是一个全局变量 至关于在外部 的一个全局变量。因此 B 输出 3。最后代码因为f没有返回值那么一个函数若是没返回值的话,将会返回 underfined ,因此答案就是 : 1, 3, 3, 1, 3, underfined 。

1十一、下面输出多少?

 

var o1 = new Object();

var o2 = o1;

o2.name = "CSSer";

console.log(o1.name);

  若是不看答案,你回答真确了的话,那么说明你对javascript的数据类型了解的仍是比较清楚了。js中有两种数据类型,分别是:基本数据类型和引用数据类型(object Array)。对于保存基本类型值的变量,变量是按值访问的,由于咱们操做的是变量实际保存的值。对于保存引用类型值的变量,变量是按引用访问的,咱们操做的是变量值所引用(指向)的对象。答案就清楚了:  //CSSer;

1十二、再来一个

 

function changeObjectProperty (o) {

    o.siteUrl = "http://www.csser.com/";

    o = new Object();

    o.siteUrl = "http://www.popcg.com/";

}

var CSSer = new Object();

changeObjectProperty(CSSer);

console.log(CSSer.siteUrl); //

    若是CSSer参数是按引用传递的,那么结果应该是"http://www.popcg.com/",但实际结果却还是"http://www.csser.com/"。事实是这样的:在函数内部修改了引用类型值的参数,该参数值的原始引用保持不变。咱们能够把参数想象成局部变量,当参数被重写时,这个变量引用的就是一个局部变量,局部变量的生存期仅限于函数执行的过程当中,函数执行完毕,局部变量即被销毁以释放内存。    

    (补充:内部环境能够经过做用域链访问全部的外部环境中的变量对象,但外部环境没法访问内部环境。每一个环境均可以向上搜索做用域链,以查询变量和函数名,反之向下则不能。)

11三、输出多少?

 

var a = 6;

setTimeout(function () {    

    var a = 666;

    alert(a);      // 输出666,

}, 1000);

a = 66;

由于var a = 666;定义了局部变量a,而且赋值为666,根据变量做用域链,
全局变量处在做用域末端,优先访问了局部变量,从而覆盖了全局变量 。

 

var a = 6;

setTimeout(function () {    

    alert(a);      // 输出undefined 

    var a = 666;

}, 1000);

a = 66;

由于var a = 666;定义了局部变量a,一样覆盖了全局变量,可是在alert(a);以前
a并未赋值,因此输出undefined。

 

var a = 6; 

setTimeout(function(){

    alert(a);

    var a = 66; 

}, 1000);

a = 666; 

alert(a); 

// 666, undefined;

记住: 异步处理,一切OK 声明提早

11四、输出多少?

 

function setN(obj){

    obj.name='屌丝';

    obj = new Object(); 

    obj.name = '腐女';

};

var per = new Object();

setN(per);

alert(per.name);  //屌丝 内部

11五、JS的继承性

 

window.color = 'red';

var o = {color: 'blue'};

function sayColor(){

    alert(this.color);

}

sayColor(); //red

sayColor.call(this); //red this-window对象

sayColor.call(window); //red

sayColor.call(o); //blue

11六、精度问题: JS 精度不能精确到 0.1 因此  。。。。同时存在于值和差值中

 

var n = 0.3,m = 0.2, i = 0.2, j = 0.1;

alert((n - m) == (i - j)); //false

alert((n-m) == 0.1); //false

alert((i-j)==0.1); //true

11七、加减运算

 

alert('5'+3); //53 string

alert('5'+'3'); //53 string

alert('5'-3); //2 number

alert('5'-'3'); //2 number

11八、什么是同源策略?

    指: 同协议、端口、域名的安全策略,由王景公司提出来的安全协议!

11九、call和applay的区别是什么?

    参数形式不一样,call(obj, pra, pra)后面是单个参数。applay(obj, [args])后面是数组。

120、为何不能定义1px左右的div容器?   

IE6下这个问题是由于默认的行高形成的,解决的方法也有不少,例如:

overflow:hidden | zoom:0.08 | line-height:1px

12一、结果是什么?

 

function foo(){

    foo.a = function(){alert(1)}; 

    this.a = function(){alert(2)};

    a = function(){alert(3)};

    var a = function(){alert(4)};

}; 

foo.prototype.a = function(){alert(5)};

foo.a = function(){alert(6)};

foo.a(); //6

var obj = new foo();

obj.a(); //2

foo.a(); //1

12二、输出结果

 

var a = 5; 

function test(){

    a = 0; 

    alert(a); 

    alert(this.a); //没有定义 a这个属性

    var a; 

    alert(a)

}

test(); // 0, 5, 0

new test(); // 0, undefined, 0 //因为类它自身没有属性a, 因此是undefined

12三、计算字符串字节数:

 

new function(s){ 

     if(!arguments.length||!s) return null;  

     if(""==s) return 0;     

     var l=0;

     for(var i=0;i<s.length;i++){        

         if(s.charCodeAt(i)>255) l+=2; else l+=1;  //charCodeAt()获得的是unCode码   

     }     //汉字的unCode码大于 255bit 就是两个字节

     alert(l); 

}("hello world!");

12四、结果是:

 

var bool = !!2; alert(bool);//true;

双向非操做能够把字符串和数字转换为布尔值。

12五、声明对象,添加属性,输出属性

 

    var obj = {

        name: 'leipeng',

        showName: function(){

            alert(this.name);

        }

    }

obj.showName();

12六、匹配输入的字符:第一个必须是字母或下划线开头,长度5-20

 

var reg = /^[a-zA-Z][a-zA-Z0-9_]{5,20}/,

            name1 = 'leipeng',

            name2 = '0leipeng',

            name3 = '你好leipeng',

            name4 = 'hi';

     

        alert(reg.test(name1));

        alert(reg.test(name2));

        alert(reg.test(name3));

        alert(reg.test(name4));

12七、检测变量类型

 

function checkStr(str){

        typeof str == 'string'? alert('true'):alert('false');

    }

    checkStr('leipeng');

12八、如何在HTML中添加事件,几种方法?

    一、标签之中直接添加 οnclick="fun()";

    二、JS添加 Eobj.onclick = method;

    三、现代事件  IE: obj.attachEvent('onclick', method);

                   FF: obj.addEventListener('click', method, false);

12九、BOM对象有哪些,列举window对象?

    一、window对象 ,是JS的最顶层对象,其余的BOM对象都是window对象的属性;

    二、document对象,文档对象;

    三、location对象,浏览器当前URL信息;

    四、navigator对象,浏览器自己信息;

    五、screen对象,客户端屏幕信息;

    六、history对象,浏览器访问历史信息;

130、请问代码实现 outerHTML

    //说明:outerHTML其实就是innerHTML再加上自己;

 

Object.prototype.outerHTML = function(){

        var innerCon = this.innerHTML, //得到里面的内容

            outerCon = this.appendChild(innerCon); //添加到里面

        alert(outerCon); 

    }

    演示代码:

     

 <!doctype html>

 <html>

  <head>

    <meta charset="UTF-8">

    <title>Document</title>

  </head>

  <body>

    <div id="outer">

       hello

    </div>

  <script>

    Object.prototype.outerHTML = function(){

    var innerCon = this.innerHTML, //得到里面的内容

    outerCon = this.appendChild(innerCon); //添加到里面

    alert(outerCon); 

      }

    function $(id){

   return document.getElementById(id);

   }

   alert($('outer').innerHTML);

   alert($('outer').outerHTML);

  </script>

 </body>

 </html>

13一、JS中的简单继承 call方法!

 

//顶一个父母类,注意:类名都是首字母大写的哦!

  function Parent(name, money){

            this.name = name;

            this.money = money;

            this.info = function(){

                alert('姓名: '+this.name+' 钱: '+ this.money);

            }

        }

        //定义孩子类

        function Children(name){

            Parent.call(this, name); //继承 姓名属性,不要钱。  

            this.info = function(){

                alert('姓名: '+this.name);

            }

        }

        //实例化类

        var per = new Parent('parent', 800000000000);

        var chi = new Children('child');

        per.info();

        chi.info();

13二、bind(), live(), delegate()的区别

    bind: 绑定事件,对新添加的事件不起做用,方法用于将一个处理程序附加到每一个匹配元素的事件上并返回jQuery对象。

    live: 方法将一个事件处理程序附加到与当前选择器匹配的全部元素(包含现有的或未来添加的)的指定事件上并返回jQuery对象。

    delegate: 方法基于一组特定的根元素将处理程序附加到匹配选择器的全部元素(现有的或未来的)的一个或多个事件上。

13三、typeof 的返回类型有哪些?   

 

    alert(typeof [1, 2]); //object

    alert(typeof 'leipeng'); //string

    var i = true; 

    alert(typeof i); //boolean

    alert(typeof 1); //number

    var a; 

    alert(typeof a); //undefined

    function a(){;};

    alert(typeof a) //function

13四、简述link和import的区别?

区别1:link是XHTML标签,除了加载CSS外,还能够定义RSS等其余事务;@import属于CSS范畴,只能加载CSS。

区别2:link引用CSS时,在页面载入时同时加载;@import须要页面网页彻底载入之后加载。

区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

区别4:link支持使用Javascript控制DOM去改变样式;而@import不支持。

13五、window.onload 和 document.ready的区别?

load要等到图片和包含的文件都加在进来以后执行;

ready是不包含图片和非文字文件的文档结构准备好就执行;

13六、 解析URL成一个对象?

            String.prototype.urlQueryString = function(){

                var url = this.split('?')[1].split('&'),

                    len = url.length;

         

                this.url = {};

                for(var i = 0; i < len; i += 1){

                    var cell = url[i].split('='),    

                        key = cell[0],

                        val = cell[1];

                    this.url[''+key+''] = val;

                } 

                return this.url;

            }

            var url = '?name=12&age=23';

            console.log(url.urlQueryString().age);

13七、看下列代码输出什么?

var foo = "11"+2-"1";

console.log(foo);

console.log(typeof foo);
执行完后foo的值为111,foo的类型为Number。

13八、看下列代码,输出什么?

var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value);
执行完后输出结果为2

13九、已知数组var stringArray = ["This”, "is”, "Baidu”, "Campus”],Alert出”This is Baidu Campus”。

答案:alert(stringArray.join(""))

140、已知有字符串foo="get-element-by-id",写一个function将其转化成驼峰表示法"getElementById"。

答案:function combo(msg){

  var arr = msg.split("-");

  var len = arr.length;  //将arr.length存储在一个局部变量能够提升for循环效率

  for(var i=1;i<len;i++){

    arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

  }

  msg=arr.join("");

  return msg;

}

14一、怎样添加、移除、移动、复制、建立和查找节点

  1)建立新节点

createDocumentFragment() //建立一个DOM片断
createElement() //建立一个具体的元素
createTextNode() //建立一个文本节点

2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入

3)查找
getElementsByTagName() //经过标签名称
getElementsByName() //经过元素的Name属性的值
getElementById() //经过元素Id,惟一性

14二、原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不一样?

  window.onload()方法是必须等到页面内包括图片的全部元素加载完毕后才能执行。

$(document).ready()是DOM结构绘制完毕后就执行,没必要等到加载完毕。 

 

14三、你如何优化本身的代码?

代码重用

避免全局变量(命名空间,封闭空间,模块化mvc..)

拆分函数避免函数过于臃肿

注释

14四、请描述出下列代码运行的结果

function d(){

        console.log(this);

}

d();

14五、须要将变量e的值修改成“a+b+c+d”,请写出对应的代码

var e=”abcd”;

设计一段代码可以遍历下列整个DOM节点

<div>

        <p>

            <span><a/></span>

            <span><a/></span>

        </p>

        <ul>

            <li></li>

            <li></li>

        </ul>

</div>

14六、怎样实现两栏等高?

14七、使用js实现这样的效果:在文本域里输入文字时,当按下enter键时不换行,而是替换成“{{enter}}”,(只须要考虑在行尾按下enter键的状况).

14八、如下代码中end字符串何时输出

var t=true;

setTimeout(function(){

    console.log(123);

    t=false;

    },1000);

while(t){}

console.log(‘end’);

14九、specify(‘hello,world’)//=>’h,e,l,l,o,w,o,r,l,d’实现specify函数

150、请将一个URL的search部分参数与值转换成一个json对象

15一、请用原生js实现jquery的get\post功能,以及跨域状况下

15二、请简要描述web前端性能须要考虑哪方面,你的优化思路是什么?

15三、简述readyonly与disabled的区别

15四、判断一个字符吕串出现次数最多的字符,统计这个次数并输出

15五、编写一个方法,去掉一个数组的复重元素

15六、写出3个使用this的典型应用

15七、请尽量详尽的解释ajax的工做原理

15八、为何扩展javascript内置对象不是好的作法?

15九、请解释一下javascript的同源策略

160、什么是三元表达式?“三元”表示什么意思?

16一、浏览器标准模式和怪异模式之间的区别是什么?

16二、若是设计中使用了非标准的字体,你该如何去实现?

16三、用css分别实现某个div元素上下居中和左右居中

16四、modulo(12,5)//2  实现知足这个结果的modulo函数

16五、HTTP协议中,GET和POST有什么区别?分别适用什么场景 ?

16六、HTTP状态消息200 302 304 403 404 500分别表示什么

16七、HTTP协议中,header信息里面,怎么控制页面失效时间(last-modified,cache-control,Expires分别表明什么)

16八、HTTP雷锋议目前经常使用的有哪几个?KEEPALIVE从哪一个版本开始出现的?

16九、业界经常使用的优化WEB页面加载速度的方法(能够分别从页面元素展示,请求链接,css,js,服务器等方面介绍)

170、列举经常使用的web页面开发,调试以及优化工具

17一、解释什么是sql注入,xss漏洞

17二、如何判断一个js变量是数组类型

17三、请列举js数组类型中的经常使用方法

17四、FF与IE中如何阻止事件冒泡,如何获取事件对象,以及如何获取触发事件的元素

17五、列举经常使用的js框架以及分别适用的领域

17六、js中如何实现一个map

17七、js能否实现面向对象编程,若是能够如何实现js对象的继承

17八、约瑟夫环—已知n我的(以编号1,2,3…分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那我的出列;他的下一我的又从1开始报数,数到m的那我的又出列;依此规律重复下去,直到圆桌周围的人所有出列。

17九、有1到10w这个10w个数,去除2个并打乱次序,如何找出那两个数?

180、如何获取对象a拥有的全部属性(可枚举的、不可枚举的,不包括继承来的属性)

18一、有下面这样一段HTML结构,使用css实现这样的效果:

左边容器不管宽度如何变更,右边容器都能自适应填满父容器剩余的宽度。

<div class=”warp”>

<div class=”left”></div>

<div class=”right”></div>

</div>

18二、下面这段代码想要循环昝输出结果01234,请问输出结果是否正确,若是不正确,请说明为何,并修改循环内的代码使其输出正确结果

for(var i=0;i<5;++i){

    setTimeout(function(){

            console.log(i+’’);

        },100*i);

}

18三、解释下这个css选择器什么发生什么?

[role=nav]>ul a:not([href^-mailto]){}

18四、JavaScript如下哪条语句会产生运行错误         

A. var obj = ();    B. var obj = [];    C. var obj = {};    D. var obj = //;

答案:AD

18五、如下哪些是javascript的全局函数:(ABC)

A. escape   函数可对字符串进行编码,这样就能够在全部的计算机上读取该字符串。ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

B. parseFloat   parseFloat() 函数可解析一个字符串,并返回一个浮点数。

该函数指定字符串中的首个字符是不是数字。若是是,则对字符串进行解析,直到到达数字的末端为止,而后以数字返回该数字,而不是做为字符串。

C. eval 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

D. setTimeout

E. alert

18六、关于IE的window对象表述正确的有:(ACD)

A. window.opener属性自己就是指向window对象

B. window.reload()方法能够用来刷新当前页面  应该是location.reload或者window.location.reload

C. window.location=”a.html”和window.location.href=”a.html”的做用都是把当前页面替换成a.html页面

D. 定义了全局变量g;能够用window.g的方式来存取该变量

18七、描述错误的是

A:Http状态码302表示暂时性转移 对

B:domContentLoaded事件早于onload事件  onload 事件会在页面或图像加载完成后当即发生。

C: IE678不支持事件捕获 

D:localStorage 存储的数据在电脑重启后丢失     没有时间限制

try...catch 语句。(在 IE5+、Mozilla 1.0、和 Netscape 6 中可用)

18八、关于link和@import的区别正确的是  A

A: link属于XHTML标签,而@import是CSS提供的;

B:页面被加载时,link会同时被加载,然后者引用的CSS会等到页面被加载完再加载

C:import只在IE5以上才能识别 而link是XHTML标签,无兼容问题

D: link方式的样式的权重高于@import的权重

18九、下面正确的是  A

A: 跨域问题能经过JsonP方案解决 B:不一样子域名间仅能经过修改window.name解决跨域   还能够经过script标签src  jsonp等h5 Java split等

C:只有在IE中可经过iframe嵌套跨域 D:MediaQuery属性是进行视频格式检测的属性是作响应式的

18八、错误的是

A: Ajax本质是XMLHttpRequest       

B: 块元素实际占用的宽度与它的width、border、padding属性有关,与background无关

C: position属性absolute、fixed、---relative---会使文档脱标

D:  float属性left也会使div脱标

18九、不用任何插件,如何实现一个tab栏切换?

190、基本数据类型的专业术语以及单词拼写

19一、变量的命名规范以及命名推荐

19二、三种弹窗的单词以及三种弹窗的功能

19三、console.log( 8 | 1 ); 输出值是多少?

答案:9

19四、只容许使用 + - * / 和 Math.* ,求一个函数 y = f(x, a, b);当x > 100 时返回 a 的值,不然返回 b 的值,不能使用 if else 等条件语句,也不能使用|,?:,数组。

答案:

function f(x, a, b) {

    var temp = Math.ceil(Math.min(Math.max(x - 100, 0), 1));

    return a * temp + b * (1 - temp);

}

console.log(f(-10, 1, 2));

19五、JavaScriptalert(0.4*0.2);结果是多少?和你预期的同样吗?若是不同该如何处理?

    有偏差,应该比准确结果偏大。 通常我会将小数变为整数来处理。当前以前遇到这个问题时也上网查询发现有人用try catch return写了一个函数,

    固然原理也是一致先转为整数再计算。看起来挺麻烦的,我没用过。

19六、一个div,有几种方式获得这个div的jQuery对象?<div class='aabbcc' id='nodesView'></div>想直接获取这个div的dom对象,如何获取?dom对象如何转化为jQuery对象?

19七、主流浏览器内核

IE trident  火狐gecko   谷歌苹果webkit  Opera:Presto

19八、如何显示/隐藏一个dom元素?请用原生的JavaScript方法实现

19九、JavaScript有哪几种数据类型

    Number String Boolean Null Undefined Object

200、jQuery框架中$.ajax()的经常使用参数有哪些?写一个post请求并带有发送数据和返回数据的样例

20一、JavaScript数组元素添加、删除、排序等方法有哪些?

Array.concat( ) 链接数组

Array.join( ) 将数组元素链接起来以构建一个字符串

Array.length 数组的大小

Array.pop( ) 删除并返回数组的最后一个元素

Array.push( ) 给数组添加元素

Array.reverse( ) 颠倒数组中元素的顺序

Array.shift( ) 将元素移出数组

Array.slice( ) 返回数组的一部分

Array.sort( ) 对数组元素进行排序

Array.splice( ) 插入、删除或替换数组的元素

Array.toLocaleString( ) 把数组转换成局部字符串

Array.toString( ) 将数组转换成一个字符串

Array.unshift( ) 在数组头部插入一个元素

20二、如何添加html元素的事件,有几种方法?请列举

直接在标签里添加;在元素上添加、使用事件注册函数添加

20三、JavaScript的循环语句有哪些?

while  for  do while  forEach

20四、做用域-编译期执行期以及全局局部做用域问题

理解js执行主要的两个阶段:预解析和执行期

20五、闭包:下面这个ul,如何点击每一列的时候alert其index?

<ul id="test">

<li>这是第一条</li>

<li>这是第二条</li>

<li>这是第三条</li>

</ul>

20六、列出3条以上ff和IE的脚本兼容问题

一、在IE下可经过document.frames["id"];获得该IFRAME对象,

而在火狐下则是经过document.getElementById("content_panel_if").contentWindow;

二、IE的写法: _tbody=_table.childNodes[0]

在FF中,firefox会在子节点中包含空白则第一个子节点为空白"", 而ie不会返回空白

能够经过if("" != node.nodeName)过滤掉空白子对象

三、模拟点击事件

if(document.all){  //ie下

    document.getElementById("a3").click();  

}

else{  //非IE

    var evt = document.createEvent("MouseEvents"); 

    evt.initEvent("click", true, true); 

    document.getElementById("a3").dispatchEvent(evt); 

四、事件注册

if (isIE){window.attachEvent("onload", init);}else{window.addEventListener("load", init, false);}

20七、列举能够哪些方面对前端开发进行优化

代码压缩、合并减小http请求,图片制做精灵图、代码优化

20八、至少列出一种JavaScript继承的实现方式

20九、如如今有一个效果,有显示用户头像、用户昵称、用户其余信息;当用户鼠标移到头像上时,会弹出用户的全部信息;若是是你,你会如何实现这个功能,请用代码实现?

2十、call与apply有什么做用?又有什么什么区别?用callee属性实现函数递归?

apply的参数是数组,call的参数是单个的值,除此以外,二者没有差异,重点理解this的改变,callee已经不推荐使用

2十一、用正则表达式,写出由字母开头,其他由数字、字母、下划线组成的6~30的字符串?

2十二、列举浏览器对象模型BOM里经常使用的至少4个对象,并列举window对象的经常使用方法至少5个 (10分)

对象:Window document location screen history navigator

方法:Alert() confirm() prompt() open() close()

21三、Javascript中callee和caller的做用?

caller是返回一个对函数的引用,该函数调用了当前函数;

callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

21四、对于apply和call二者在做用上是相同的,便是调用一个对象的一个方法,以另外一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

但二者在参数上有区别的。对于第一个参数意义都同样,但对第二个参数:?apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则做为call的参数传入(从第二个参数开始)。?如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 。

21五、在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):没法直接调用数组方法或指望length属性有什么特殊的行为,但仍能够对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。能够使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

21六、写一个函数能够计算 sum(5,0,-5);输出0; sum(1,2,3,4);输出10;

Js基本功

21七、事件代理怎么实现?

在元素的父节点注册事件,经过事件冒泡,在父节点捕获事件

21八、《正则》写出正确的正则表达式匹配固话号,区号3-4位,第一位为0,中横线,7-8位数字,中横线,3-4位分机号格式的固话号

经常使用正则表达式语法要熟悉

21九、《算法》 一下A,B可任选一题做答,两题全答加分

A:农场买了一只羊,第一年是小羊,第二年末生一只,第三年不生,第四年末再生一只,第五年死掉。

B:写出代码对下列数组去重并从大到小排列{5,2,3,6,8,6,5,4,7,1,9}

220、请写出一张图片的HTML代码,已知道图片地址为“images/abc.jpg”,宽100px,高50px

22一、请写一个正则表达式:要求最短6位数,最长20位,阿拉伯数和英文字母(不区分大小写)组成

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$

22二、统计1到400亿之间的天然数中含有多少个1?好比1-21中,有一、十、十一、21这四个天然数有5个1

22三、删除与某个字符相邻且相同的字符,好比fdaffdaaklfjklja字符串处理以后成为“fdafdaklfjklja”

22四、请写出三种以上的Firefox有但InternetExplorer没有的属性和函数

一、在IE下可经过document.frames["id"];获得该IFRAME对象,

而在火狐下则是经过document.getElementById("content_panel_if").contentWindow;

二、IE的写法: _tbody=_table.childNodes[0]

在FF中,firefox会在子节点中包含空白则第一个子节点为空白"", 而ie不会返回空白

能够经过if("" != node.nodeName)过滤掉空白子对象

三、模拟点击事件

if(document.all){  //ie下

    document.getElementById("a3").click(); 

}

else{  //非IE

    var evt = document.createEvent("MouseEvents"); 

    evt.initEvent("click", true, true); 

    document.getElementById("a3").dispatchEvent(evt); 

四、事件注册

if (isIE){window.attachEvent("onload", init);}else{window.addEventListener("load", init, false);}

22五、请写出一个程序,在页面加载完成后动态建立一个form表单,并在里面添加一个input对象并给它任意赋值后义post方式提交到:http://127.0.0.1/save.php

 

22六、用JavaScript实现冒泡排序。数据为2三、4五、1八、3七、9二、1三、24

面试常常遇到的排序,查找算法要熟悉

22七、解释一下什么叫闭包,并实现一段闭包代码

简单理解就是函数的嵌套造成闭包,闭包包括函数自己及其外部做用域

22八、简述一下什么叫事件委托以及其原理

在元素的父节点注册事件,经过事件冒泡,在父节点捕获事件

22九、前端代码优化的方法

var User = { 对象

    count = 1,属性

    getCount:function(){ 方法

        return this.count;

    }

}

console.log(User.getCount());

var func = User.getCount;

console.log(func());

1 undefined(window);

230、下列JavaScript代码执行后,依次alert的结果是

(function test(){

      var a=b=5;

      alert(typeof a);

      alert(typeof b);

})();

alert(typeof a);

alert(typeof b);

23一、下列JavaScript代码执行后,iNum的值是

var iNum = 0;

for(var i = 1; i< 10; i++){

     if(i % 5 == 0){

         continue;

    }

    iNum++;

}

23二、输出结果是多少?

 1)  var a;

var b = a * 0;

if (b == b) {

     console.log(b * 2 + "2" - 0 + 4);

} else {

     console.log(!b * 2 + "2" - 0 + 4);

}

答案:26

2) <script>

     var a = 1;

</script>

<script>

var a;

var b = a * 0;

if (b == b) {

        console.log(b * 2 + "2" - 0 + 4);

} else {

        console.log(!b * 2 + "2" - 0 + 4);

}

</script>

答案:6

3)  var t = 10;

function test(t){

       var t = t++;

}test(t);

console.log(t);

答案:10

4) var t = 10;

function test(test){

      var t = test++;

}test(t);

console.log(t);

答案:10

6) var t = 10;

function test(test){

       t = test++;

}test(t);

console.log(t);

答案:10

7) var t = 10;

function test(test){

      t = t + test;

      console.log(t);

      var t = 3;

}test(t);

console.log(t);

答案:NaN  10

8)var a;

var b = a / 0;

if (b == b) {

        console.log(b * 2 + "2" - 0 + 4);

} else {

        console.log(!b * 2 + "2" - 0 + 4);

}

答案:26

9)<script>

      var a = 1;

</script>

<script>

    var a;

    var b = a / 0;

    if (b == b) {

        console.log(b * 2 + "2" + 4);

    } else {

        console.log(!b * 2 + "2" + 4);

    }

</script>

答案:Infinity24

23三、

<body>

<form id='form1'>

<div id='div1'></div>

<div id='div2'></div>

<div id='div3'></div>

<div id='div4'></div>

<div id='div5'></div>

<div id='div3'>id名重复的元素</div>

</form>

</body>

用程序实现找到html中id名相同的元素?

23四、下列JavaScript代码执行后,运行的结果是

<button id='btn'>点击我</button>

var btn = document.getElementById('btn');

var handler = {

    id: '_eventHandler',

    exec: function(){

        alert(this.id);

    }

}

btn.addEventListener('click', handler.exec.false);

23五、下列JavaScript代码执行后,依次alert的结果是

var obj = {proto: {a:1,b:2}};

function F(){};

F.prototype = obj.proto;

var f = new F();

obj.proto.c = 3;

obj.proto = {a:-1, b:-2};

alert(f.a);

alert(f.c);

delete F.prototype['a'];

alert(f.a);

alert(obj.proto.a);

23六、下列JavaScript代码执行后的效果是

<ul id='list'>

<li>item</li>

<li>item</li>

<li>item</li>

<li>item</li>

<li>item</li>

</ul>

var items = document.querySelectorAll('#list>li');

for(var i = 0;i < items.length; i++){

     setTimeout(function(){

           items[i].style.backgroundColor = '#fee';

    }, 5);

}

23七、下列JavaScript代码执行后的li元素的数量是

<ul>

<li>Item</li>

<li></li>

<li></li>

<li>Item</li>

<li>Item</li>

</ul>

var items = document.getElementsByTagName('li');

for(var i = 0; i< items.length; i++){

    if(items[i].innerHTML == ''){

        items[i].parentNode.removeChild(items[i]);

    }

}

23八、程序中捕获异常的方法?

window.error

try{}catch(){}finally{}

23九、将字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替换成10,{$name}替换成Tony (使用正则表达式)

答案:”<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>”.replace(/{\$id}/g,?’10′).replace(/{\$name}/g,?‘Tony’);

240、给String对象添加一个方法,传入一个string类型的参数,而后将string的每一个字符间价格空格返回,例如:

addSpace(“hello world”) // -> ‘h e l l o ?w o r l d’

         String.prototype.spacify = function(){

return this.split('').join(' ');

};

24一、写出函数DateDemo的返回结果,系统时间假定为今天

function DateDemo(){

 var d, s="今天日期是:";

d = new Date();

s += d.getMonth() + "/";

s += d.getDate() + "/";

s += d.getYear();

 return s;

}

结果:今天日期是:7/17/2010

24二、输出今天的日期,以YYYY-MM-DD的方式,好比今天是2014年9月26日,则输出2014-09-26

var d = new Date();

// 获取年,getFullYear()返回4位的数字

var year = d.getFullYear();

// 获取月,月份比较特殊,0是1月,11是12月

var month = d.getMonth() + 1;

// 变成两位

month = month < 10 ? '0' + month : month;

// 获取日

var day = d.getDate();

day = day < 10 ? '0' + day : day;

alert(year + '-' + month + '-' + day);

24三、已知数组var?stringArray?=?[“This”,?“is”,?“Baidu”,?“Campus”],Alert出”This?is?Baidu?Campus”。

答案:alert(stringArray.join(“”))

24四、已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。

function combo(msg){

var arr=msg.split("-");

for(var i=1;i<arr.length;i++){

arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

}

msg=arr.join("");

return msg;

}

24五、.varnumberArray=[3,6,2,4,1,5]; (考察基础API)

1)实现对该数组的倒排,输出[5,1,4,2,6,3]

2)实现对该数组的降序排列,输出[6,5,4,3,2,1]

function combo(msg){

var arr=msg.split("-");

for(var i=1;i<arr.length;i++){

arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

}

msg=arr.join("");

return msg;

}

24六、把两个数组合并,并删除第二个元素。

var array1 = ['a','b','c'];

var bArray = ['d','e','f'];

var cArray = array1

24七、如何消除一个数组里面重复的元素?

var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];

function deRepeat(){

var newArr=[];

var obj={};

var index=0;

var l=arr.length;

for(var i=0;i<l;i++){

if(obj[arr[i]]==undefined)

{

obj[arr[i]]=1;

newArr[index++]=arr[i];

}

else if(obj[arr[i]]==1)

}

return newArr;

}

var newArr2=deRepeat(arr);

alert(newArr2); //输出1,2,3,4,5,6,9,25

24八、用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。

var iArray = [];

funtion getRandom(istart, iend){

var iChoice = istart - iend +1;

return Math.floor(Math.random() * iChoice + istart;

}

for(var i=0; i<10; i++){

iArray.push(getRandom(10,100));

}

iArray.sort();

24九、正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不一样?匹配邮箱的正则表达式?

答案:当使用RegExp()构造函数的时候,不只须要转义引号(即\”表示”),而且还须要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。?

250、1 var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

正则表达式对象3 – 清除空格

写一个function,清除字符串先后的空格。(兼容全部浏览器)

使用自带接口trim(),考虑兼容性:

if (!String.prototype.trim) {

String.prototype.trim = function() {

return this.replace(/^\s+/, "").replace(/\s+$/,"");

} }

// test the function

var str = " \t\n test string ".trim();

alert(str == "test string"); // alerts "true"

25一、数组和字符串

<script lang="JavaScript" type="text/javascript">

    function outPut(s) {

        document.writeln(s);

    }

    var a = "lashou";

    var b = a;

    outPut(b);

    a = "拉手";

    outPut(a);

    outPut(b);

    var a_array = [1, 2, 3];

    var b_array = a_array;

    outPut(b_array);

    a_array[3] = 4;

    outPut(a_array);

    outPut(b_array);

</script>

输出结果:

答案:lashou 拉手 lashou 1,2,3 1,2,3,4 1,2,3,4

25二、下列控制台都输出什么

第1题:

function setName(){

    name="张三";

}

setName();

console.log(name);

答案:"张三"

25三、第2题:

//考点:一、变量声明提高 二、变量搜索机制

var a=1;

function test(){

    console.log(a);

    var a=1;

}

test();

答案:undefined

25四、第3题:

var b=2;

function test2(){

    window.b=3;

    console.log(b);

}

test2();

答案:3

25五、第4题:

c=5;//声明一个全局变量c

function test3(){

    window.c=3;

    console.log(c);     //答案:undefined,缘由:因为此时的c是一个局部变量c,而且没有被赋值

    var c;

    console.log(window.c);//答案:3,缘由:这里的c就是一个全局变量c

}

test3();

25六、第5题:

var arr = [];

arr[0]  = 'a';

arr[1]  = 'b';

arr[10] = 'c';

alert(arr.length);  //答案:11

console.log(arr[5]);    //答案:undefined

25七、第6题:

var a=1;

console.log(a++);       //答案:1

console.log(++a);       //答案:3

25八、第7题:

console.log(null==undefined);   //答案:true

console.log("1"==1);        //答案:true,由于会将数字1先转换为字符串1

console.log("1"===1);       //答案:false,由于数据类型不一致

25九、第8题:

typeof 1;       "number"

typeof "hello";     "string"

typeof /[0-9]/;     "object"

typeof {};      "object"

typeof null;        "object"

typeof undefined;   "undefined"

typeof [1,2,3];     "object"

typeof function(){};    //"function"

260、第9题:

parseInt(3.14);         //3

parseFloat("3asdf");        //3

parseInt("1.23abc456");

parseInt(true);//"true" NaN

26一、第10题:

//考点:函数声明提早

function bar() {

    return foo;

    foo = 10;

    function foo() {}

    //var foo = 11;

}

alert(typeof bar());//"function"

26二、第11题:考点:函数声明提早

var foo = 1;

function bar() {

    foo = 10;

    return;

    function foo() {}

}

bar();

alert(foo);//答案:1

26三、第12题:

console.log(a);//是一个函数

var a = 3;

function a(){}

console.log(a);3

26四、第13题:

//考点:对arguments的操做

function foo(a) {

    arguments[0] = 2;

    alert(a);//答案:2,由于:a、arguments是对实参的访问,b、经过arguments[i]能够修改指定实参的值

}

foo(1);

26五、第14题:

function foo(a) {

    alert(arguments.length);//答案:3,由于arguments是对实参的访问

}

foo(1, 2, 3);

26六、第15题

bar();//报错

var foo = function bar(name) {

    console.log("hello"+name);

    console.log(bar);

};

//alert(typeof bar);

foo("world");//"hello"

console.log(bar);//undefined

console.log(foo.toString());

bar();//报错

26七、第16题

function test(){

    console.log("test函数");

}

setTimeout(function(){

    console.log("定时器回调函数");

}, 0)

test();

function foo(){

    var name="hello";

}

3、Jquery

一、jQuery 的 slideUp动画 ,若是目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

 

4、HTML5 CSS3

一、CSS3有哪些新特性?

1. CSS3实现圆角(border-radius),阴影(box-shadow),

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

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

4. 增长了更多的CSS选择器  多背景 rgba

5. 在CSS3中惟一引入的伪元素是 ::selection.

6. 媒体查询,多栏布局

7. border-image

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

新特性:

1. 拖拽释放(Drag and drop) API

2. 语义化更好的内容标签(header,nav,footer,aside,article,section)

3. 音频、视频API(audio,video)

4. 画布(Canvas) API

5. 地理(Geolocation) API

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

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

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

9. 新的技术webworker, websocket, Geolocation

移除的元素:

1. 纯表现的元素:basefont,big,center,font, s,strike,tt,u;

2. 对可用性产生负面影响的元素:frame,frameset,noframes;

支持HTML5新标签:

1. IE8/IE7/IE6支持经过 document.createElement 方法产生的标签,能够利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还须要添加标签默认的样式(固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架):

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

如何区分:

DOCTYPE声明新增的结构元素、功能元素

三、本地存储(Local Storage )和cookies(储存在用户本地终端上的数据)之间的区别是什么?

Cookies:服务器和客户端均可以访问;大小只有4KB左右;有有效期,过时后将会删除;

本地存储:只有本地浏览器端可访问数据,服务器不能访问本地存储直到故意经过POST或者GET的通道发送到服务器;每一个域5MB;没有过时数据,它将保留知道用户从浏览器清除或者使用Javascript代码移除

四、如何实现浏览器内多个标签页之间的通讯?

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

五、你如何对网站的文件和资源进行优化?

文件合并

文件最小化/文件压缩

使用CDN托管

缓存的使用

六、什么是响应式设计?

它是关于网页制做的过程当中让不一样的设备有不一样的尺寸和不一样的功能。响应式设计是让全部的人能在这些设备上让网站运行正常 

七、新的 HTML5 文档类型和字符集是?

答:HTML5文档类型:<!doctype html>

    HTML5使用的编码<meta charset=”UTF-8”>

八、HTML5 Canvas 元素有什么用?

答:Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于能够直接在 HTML 上进行图形操做。

九、HTML5 存储类型有什么区别?

答:Media API、Text Track API、Application Cache API、User Interaction、Data Transfer API、Command API、Constraint Validation API、History API

十、用H5+CSS3解决下导航栏最后一项掉下来的问题

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

十二、请用CSS实现:一个矩形内容,有投影,有圆角,hover状态慢慢变透明。

css属性的熟练程度和实践经验

1三、描述下CSS3里实现元素动画的方法

动画相关属性的熟悉程度

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

HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,地理定位等功能的增长。

* 绘画 canvas 元素

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

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

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

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

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

  CSS3实现圆角,阴影,对文字加特效,增长了更多的CSS选择器  多背景 rgba

  新的技术webworker, websockt, Geolocation

移除的元素

纯表现的元素:basefont,big,center,font, s,strike,tt,u;

对可用性产生负面影响的元素:frame,frameset,noframes;

* 是IE8/IE7/IE6支持经过document.createElement方法产生的标签,

  能够利用这一特性让这些浏览器支持HTML5新标签,

  浏览器支持新标签后,还须要添加标签默认的样式:

* 固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

1五、你怎么来实现页面设计图,你认为前端应该如何高质量完成工做? 一个满屏 品 字布局 如何设计?

* 首先划分红头部、body、脚部;。。。。。

* 实现效果图是最基本的工做,精确到2px;

  与设计师,产品经理的沟通和项目的参与

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

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

  针对服务器的优化、拥抱 HTML5。

1六、你能描述一下渐进加强和优雅降级之间的不一样吗?

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

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

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

  “优雅降级”观点

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

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

  “渐进加强”观点

  “渐进加强”观点则认为应关注于内容自己。

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

 

  那么问题了。如今产品经理看到IE6,7,8网页效果相对高版本现代浏览器少了不少圆角,阴影(CSS3),要求兼容(使用图片背景,放弃CSS3),你会如何说服他?

1七、为何利用多个域名来存储网站资源会更有效?

CDN缓存更方便 

突破浏览器并发限制 

节约cookie带宽 

节约主域名的链接数,优化页面响应速度 

防止没必要要的安全问题

1八、请谈一下你对网页标准和标准制定机构重要性的理解。

  (无标准答案)网页标准和标准制定机构都是为了能让web发展的更‘健康’,开发者遵循统一的标准,下降开发难度,开发成本,SEO也会更好作,也不会由于滥用代码致使各类BUG、安全问题,最终提升网站易用性。

 

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

  sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁。所以sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。

web storage和cookie的区别

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

除此以外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie须要前端开发者本身封装setCookie,getCookie。可是Cookie也是不能够或缺的:Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

20、知道css有个content属性吗?有什么做用?有什么应用?

知道。css的content属性专门应用在 before/after 伪元素上,用来插入生成内容。最多见的应用是利用伪类清除浮动。

//一种常见利用伪类清除浮动的代码

.clearfix:after {

    content:"."; //这里利用到了content属性

    display:block;

    height:0;

    visibility:hidden;

    clear:both; }

.clearfix {

    *zoom:1;

}

after伪元素经过 content 在元素的后面生成了内容为一个点的块级素,再利用clear:both清除浮动。

  那么问题继续还有,知道css计数器(序列数字字符自动递增)吗?如何经过css content属性实现css计数器?

答案:css计数器是经过设置counter-reset 、counter-increment 两个属性 、及 counter()/counters()一个方法配合after / before 伪类实现。 

2一、如何在 HTML5 页面中嵌入音频?

HTML 5 包含嵌入音频文件的标准方式,支持的格式包括 MP三、Wav 和 Ogg:

<audio controls> 

  <source src="jamshed.mp3" type="audio/mpeg"> 

   Your browser does'nt support audio embedding feature. 

</audio>

2二、如何在 HTML5 页面中嵌入视频?

和音频同样,HTML5 定义了嵌入视频的标准方法,支持的格式包括:MP四、WebM 和 Ogg:

<video width="450" height="340" controls> 

  <source src="jamshed.mp4" type="video/mp4"> 

   Your browser does'nt support video embedding feature. 

</video> 

2三、HTML5 引入什么新的表单属性?

Datalist   datetime   output   keygen  date  month  week  time  number   range   emailurl

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

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

(HTML5中新增长的不少标签(如:<article>、<nav>、<header>和<footer>等)

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

< div id="header">

< h1>标题< /h1>

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

< /div>

语义 HTML 具备如下特性:

 

文字包裹在元素中,用以反映内容。例如:

段落包含在 <p> 元素中。

顺序表包含在<ol>元素中。

从其余来源引用的大型文字块包含在<blockquote>元素中。

HTML 元素不能用做语义用途之外的其余目的。例如:

<h1>包含标题,但并不是用于放大文本。

<blockquote>包含大段引述,但并不是用于文本缩进。

空白段落元素 ( <p></p> ) 并不是用于跳行。

文本并不直接包含任何样式信息。例如:

不使用 <font> 或 <center> 等格式标记。

类或 ID 中不引用颜色或位置。

26.cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage区别

sessionStorage和localStorage的存储空间更大;

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

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

2七、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]-->

2八、如何区分: DOCTYPE声明\新增的结构元素\功能元素

2九、语义化的理解?

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

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

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

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

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

30、HTML5的离线储存?

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

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

3一、写出HTML5的文档声明方式

 

 <DOCYPE html>

3二、HTML5和CSS3的新标签     

 

 

HTML5: nav, footer, header, section, hgroup, video, time, canvas, audio...

CSS3: RGBA, opacity, text-shadow, box-shadow, border-radius, border-image, 

border-color, transform...;

3三、本身对标签语义化的理解

    在我看来,语义化就是好比说一个段落, 那么咱们就应该用 <p>标签来修饰,标题就应该用 <h?>标签等。符合文档语义的标签。

5、移动web开发

一、移动端经常使用类库及优缺点

知识面宽度,多多益善

二、Zepto库和JQ区别

Zepto相对jQuery更加轻量,主要用在移动端,jQuery也有对应的jQuerymobile移动端框架

6、Ajax

一、Ajax 是什么? 如何建立一个Ajax?

Ajax并不算是一种新的技术,全称是asychronous javascript and xml,能够说是已有技术的组合,主要用来实现客户端与服务器端的异步通讯效果,实现页面的局部刷新,早期的浏览器并不能原生支持ajax,能够使用隐藏帧(iframe)方式变相实现异步效果,后来的浏览器提供了对ajax的原生支持

使用ajax原生方式发送请求主要经过XMLHttpRequest(标准浏览器)、ActiveXObject(IE浏览器)对象实现异步通讯效果

基本步骤:

var xhr =null;//建立对象

if(window.XMLHttpRequest){

   xhr = new XMLHttpRequest();

}else{

   xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

     xhr.open(“方式”,”地址”,”标志位”);//初始化请求

     xhr.setRequestHeader(“”,””);//设置http头信息

     xhr.onreadystatechange =function(){}//指定回调函数

     xhr.send();//发送请求

js框架(jQuery/EXTJS等)提供的ajax  API对原生的ajax进行了封装,熟悉了基础理论,再学习别的框架就会驾轻就熟,好多都是换汤不换药的内容

二、同步和异步的区别?

同步:阻塞的

-张三叫李四去吃饭,李四一直忙得不停,张三一直等着,直到李四忙完两我的一块去吃饭

=浏览器向服务器请求数据,服务器比较忙,浏览器一直等着(页面白屏),直到服务器返回数据,浏览器才能显示页面

异步:非阻塞的

-张三叫李四去吃饭,李四在忙,张三说了一声而后本身就去吃饭了,李四忙完后本身去吃

=浏览器向服务器请求数据,服务器比较忙,浏览器能够自如的干原来的事情(显示页面),服务器返回数据的时候通知浏览器一声,浏览器把返回的数据再渲染到页面,局部更新

三、如何解决跨域问题?

理解跨域的概念:协议、域名、端口都相同才同域,不然都是跨域

出于安全考虑,服务器不容许ajax跨域获取数据,可是能够跨域获取文件内容,因此基于这一点,能够动态建立script标签,使用标签的src属性访问js文件的形式获取js脚本,而且这个js脚本中的内容是函数调用,该函数调用的参数是服务器返回的数据,为了获取这里的参数数据,须要事先在页面中定义回调函数,在回调函数中处理服务器返回的数据,这就是解决跨域问题的主流解决方案

四、页面编码和被请求的资源编码若是不一致如何处理?

对于ajax请求传递的参数,若是是get请求方式,参数若是传递中文,在有些浏览器会乱码,不一样的浏览器对参数编码的处理方式不一样,因此对于get请求的参数须要使用 encodeURIComponent函数对参数进行编码处理,后台开发语言都有相应的解码api。对于post请求不须要进行编码

五、简述ajax 的过程。

1. 建立XMLHttpRequest对象,也就是建立一个异步调用对象

2. 建立一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息

3. 设置响应HTTP请求状态变化的函数

4. 发送HTTP请求

5. 获取异步调用返回的数据

6. 使用JavaScript和DOM实现局部刷新

六、阐述一下异步加载。

1. 异步加载的方案: 动态插入 script 标签

2. 经过 ajax 去获取 js 代码,而后经过 eval 执行

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

4. 建立并插入 iframe,让它异步执行 js

七、请解释一下 JavaScript 的同源策略。

同源策略是客户端脚本(尤为是Javascript)的重要的安全度量标准。它最先出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不一样源装载。所谓同源指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

八、GET和POST的区别,什么时候使用POST?

GET:通常用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,通常在2000个字符,有的浏览器是8000个字符

POST:通常用于修改服务器上的资源,对所发送的信息没有限制

在如下状况中,请使用 POST 请求:

1. 没法使用缓存文件(更新服务器上的文件或数据库)

2. 向服务器发送大量数据(POST 没有数据量限制)

3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

九、ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

 1. 经过异步模式,提高了用户体验

 2. 优化了浏览器和服务器之间的传输,减小没必要要的数据往返,减小了带宽占用

3.  Ajax在客户端运行,承担了一部分原本由服务器承担的工做,减小了大用户量下的服务器负载。

十、 Ajax的最大的特色是什么。

    Ajax能够实现异步通讯效果,实现页面局部刷新,带来更好的用户体验;按需获取数据,节约带宽资源;

十一、ajax的缺点

 一、ajax不支持浏览器back按钮。

 二、安全问题 AJAX暴露了与服务器交互的细节。

 三、对搜索引擎的支持比较弱。

 四、破坏了程序的异常机制。

十二、ajax请求的时候get 和post方式的区别

get通常用来进行查询操做,url地址有长度限制,请求的参数都暴露在url地址当中,若是传递中文参数,须要本身进行编码操做,安全性较低。

post请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴漏在url地址中。

1三、解释jsonp的原理,以及为何不是真正的ajax

  Jsonp并非一种数据格式,而json是一种数据格式,jsonp是用来解决跨域获取数据的一种解决方案,具体是经过动态建立script标签,而后经过标签的src属性获取js文件中的js脚本,该脚本的内容是一个函数调用,参数就是服务器返回的数据,为了处理这些返回的数据,须要事先在页面定义好回调函数,本质上使用的并非ajax技术

1四、什么是Ajax和JSON,它们的优缺点。

Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页面局部刷新。

优势:能够使得页面不重载所有内容的状况下加载局部内容,下降数据传输量,避免用户不断刷新或者跳转页面,提升用户体验

缺点:对搜索引擎不友好;要实现ajax下的先后退功能成本较大;可能形成请求数的增长跨域问题限制;

JSON是一种轻量级的数据交换格式,ECMA的一个子集

优势:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)

1五、http常见的状态码有那些?分别表明是什么意思?

200 - 请求成功

301 - 资源(网页等)被永久转移到其它URL

404 - 请求的资源(网页等)不存在

500 - 内部服务器错误

1六、一个页面从输入 URL 到页面加载显示完成,这个过程当中都发生了什么?

分为4个步骤:

1. 当发送一个 URL 请求时,无论这个 URL 是 Web 页面的 URL 仍是 Web 页面上每一个资源的 URL,浏览器都会开启一个线程来处理这个请求,同时在远程 DNS 服务器上启动一个 DNS 查询。这能使浏览器得到请求对应的 IP 地址。

2. 浏览器与远程 Web 服务器经过 TCP 三次握手协商来创建一个 TCP/IP 链接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试创建起通讯,然后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。

3. 一旦 TCP/IP 链接创建,浏览器会经过该链接向远程服务器发送 HTTP 的 GET 请求。远程服务器找到资源并使用 HTTP 响应返回该资源,值为 200 的 HTTP 响应状态表示一个正确的响应。

4. 此时,Web 服务器提供资源服务,客户端开始下载资源。

1七、ajax请求的时候get 和post方式的区别

get通常用来进行查询操做,url地址有长度限制,请求的参数都暴露在url地址当中,若是传递中文参数,须要本身进行编码操做,安全性较低。

post请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴漏在url地址中。

1八、ajax请求时,如何解释json数据

使用eval()或者JSON.parse() 鉴于安全性考虑,推荐使用JSON.parse()更靠谱,对数据的安全性更好。

1九、.javascript的本地对象,内置对象和宿主对象

本地对象为独立于宿主环境的ECMAScript提供的对象,包括ArrayObjectRegExp等能够new实例化的对象

内置对象为Gload,Math 等不能够实例化的(他们也是本地对象,内置对象是本地对象的一个子集)

宿主对象为全部的非本地对象,全部的BOM和DOM对象都是宿主对象,如浏览器自带的document,window 等对象

20、为何利用多个域名来存储网站资源会更有效?

确保用户在不一样地区能用最快的速度打开网站,其中某个域名崩溃用户也能经过其余郁闷访问网站,而且不一样的资源放到不一样的服务器上有利于减轻单台服务器的压力。

2一、请说出三种减低页面加载时间的方法

一、压缩css、js文件
二、合并js、css文件,减小http请求
三、外部js、css文件放在最底下
四、减小dom操做,尽量用变量替代没必要要的dom操做

2二、HTTP状态码都有那些。

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

403 Forbidden  //服务器收到请求,可是拒绝提供服务

404 Not Found  //请求资源不存在,输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

7、JS高级

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

jQuery能够给一个对象同时绑定多个事件,低层实现方式是使用addEventListner或attachEvent兼容不一样的浏览器实现事件的绑定,这样能够给同一个对象注册多个事件。

二、知道什么是webkit么? 知道怎么用浏览器的各类工具来调试和debug代码么?

Webkit是浏览器引擎,包括html渲染和js解析功能,手机浏览器的主流内核,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)。

对于浏览器的调试工具要熟练使用,主要是页面结构分析,后台请求信息查看,js调试工具使用,熟练使用这些工具能够快速提升解决问题的效率

三、如何测试前端代码? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

了解BDD行为驱动开发与TDD测试驱动开发已经单元测试相关概念,

四、 前端templating(Mustache, underscore, handlebars)是干吗的, 怎么用?

Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,

Mustache 是一个 logic-less (轻逻辑)模板解析引擎,它的优点在于能够应用在 Javascript、PHP、Python、Perl 等多种编程语言中。

Underscore封装了经常使用的JavaScript对象操做方法,用于提升开发效率。

Handlebars 是 JavaScript 一个语义模板库,经过对view和data的分离来快速构建Web模板。

五、简述一下 Handlebars 的基本用法?

没有用过的话说出它是干什么的便可

六、简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?

学习技术不只要会用,还有熟悉它的实现机制,这样在开发中遇到问题时才能更好的解决

七、用js实现千位分隔符?

原生js的熟练度,实践经验,实现思路

八、检测浏览器版本版本有哪些方式?

IE与标准浏览器判断,IE不一样版本的判断,userAgent  var ie = /*@cc_on !@*/false;

九、咱们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来讲下会执行几回事件,而后会先执行冒泡仍是捕获

对两种事件模型的理解

十、实现一个函数clone,能够对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

  • 考察点1:对于基本数据类型和引用数据类型在内存中存放的是值仍是指针这一区别是否清楚
  • 考察点2:是否知道如何判断一个变量是什么类型的
  • 考察点3:递归算法的设计

 

// 方法一:

Object.prototype.clone = function(){

   var o = this.constructor === Array ? [] : {};

   for(var e in this){

    o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];

   }

   return o;

}

//方法二:

  /**

     * 克隆一个对象

     * @param Obj

     * @returns

     */

    function clone(Obj) {  

        var buf;  

        if (Obj instanceof Array) {  

            buf = [];//建立一个空的数组

            var i = Obj.length;  

            while (i--) {  

                buf[i] = clone(Obj[i]);  

            }  

            return buf;   

        }else if (Obj instanceof Object){  

            buf = {};//建立一个空对象

            for (var k in Obj) { //为这个对象添加新的属性

                buf[k] = clone(Obj[k]);  

            }  

            return buf;  

        }else{ //普通变量直接赋值

            return Obj;  

        }  

    }

十一、如何消除一个数组里面重复的元素?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];

        function deRepeat(){

            var newArr=[];

            var obj={};

            var index=0;

            var l=arr.length;

            for(var i=0;i<l;i++){

                if(obj[arr[i]]==undefined)

                  {

                    obj[arr[i]]=1;

                    newArr[index++]=arr[i];

                  }

                else if(obj[arr[i]]==1)

                  continue;

            }

            return newArr;

        }

        var newArr2=deRepeat(arr);

        alert(newArr2); //输出1,2,3,4,5,6,9,25

十二、小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述能够获得如下对象:

 

 

 

 

 

 

 

 

function Dog() {

      this.wow = function() {

               alert(’Wow’);

      }

      this.yelp = function() {

              this.wow();

      }

}

小芒和小贤同样,原来也是一条可爱的小狗,但是忽然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述,按示例的形式用代码来实。(继承,原型,setInterval)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function MadDog() {

    this.yelp = function() {

          var self = this;         

          setInterval(function() {

                self.wow();     

          }, 500);

      }

}

MadDog.prototype = new Dog();        

//for test

var dog = new Dog();

dog.yelp();

var madDog = new MadDog();

madDog.yelp();

1三、下面这个ul,如何点击每一列的时候alert其index?(闭包)

 

 

 

 

 

<ul id=”test”>

<li>这是第一条</li>

<li>这是第二条</li>

<li>这是第三条</li>

</ul>

 

// 方法一:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++)

{

    lis[i].index=i;

    lis[i].οnclick=function(){

        alert(this.index);

    };

}

//方法二:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++){

    lis[i].index=i;

    lis[i].οnclick=(function(a){

        return function() {

            alert(a);

        }

    })(i);

}

1四、编写一个JavaScript函数,输入指定类型的选择器(仅需支持id,class,tagName三种简单CSS选择器,无需兼容组合选择器)能够返回匹配的DOM节点,需考虑浏览器兼容性和性能。

/*** @param selector {String} 传入的CSS选择器。* @return {Array}*/

 

var query = function(selector) {

var reg = /^(#)?(\.)?(\w+)$/img;

var regResult = reg.exec(selector);

var result = [];

//若是是id选择器

if(regResult[1]) {

if(regResult[3]) {

if(typeof document.querySelector === "function") {

result.push(document.querySelector(regResult[3]));

    }else {

      result.push(document.getElementById(regResult[3]));

    }

  }

  }

  //若是是class选择器

  else if(regResult[2]) {

   if(regResult[3]) {

      if(typeof document.getElementsByClassName === 'function') {

        var doms = document.getElementsByClassName(regResult[3]);

        if(doms) {

          result = converToArray(doms);

        }

      }

     //若是不支持getElementsByClassName函数

     else {

      var allDoms = document.getElementsByTagName("*") ;

       for(var i = 0, len = allDoms.length; i < len; i++) {

         if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) {

           result.push(allDoms[i]);

        }

       }

    }

 }

}

 //若是是标签选择器

 else if(regResult[3]) {

   var doms = document.getElementsByTagName(regResult[3].toLowerCase());

   if(doms) {

     result = converToArray(doms);

   }

 }

 return result;

 }

 function converToArray(nodes){

    var array = null;        

    try{       

     array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器        

   }catch(ex){

    array = new Array();        

   for( var i = 0 ,len = nodes.length; i < len ; i++ ) {

     array.push(nodes[i])        

   }

  }     

  return array;

}

1五、请评价如下代码并给出改进意见。

 

if(window.addEventListener){

    var addListener = function(el,type,listener,useCapture){

        el.addEventListener(type,listener,useCapture);

  };

}

else if(document.all){

    addListener = function(el,type,listener){

        el.attachEvent("on"+type,function(){

          listener.apply(el);

      });

   } 

}

  • 不该该在if和else语句中声明addListener函数,应该先声明;
  • 不须要使用window.addEventListener或document.all来进行检测浏览器,应该使用能力检测;
  • 因为attachEvent在IE中有this指向问题,因此调用它时须要处理一下

改进以下:

function addEvent(elem, type, handler){

  if(elem.addEventListener){

    elem.addEventListener(type, handler, false);

  }else if(elem.attachEvent){

    elem['temp' + type + handler] = handler;

    elem[type + handler] = function(){

    elem['temp' + type + handler].apply(elem);

  };

  elem.attachEvent('on' + type, elem[type + handler]); 

  }else{

  elem['on' + type] = handler;

  }

}

1六、给String对象添加一个方法,传入一个string类型的参数,而后将string的每一个字符间价格空格返回,例如:

addSpace(“hello world”) // -> ‘h e l l o  w o r l d’

 

 

 

String.prototype.spacify = function(){

      return this.split('').join(' ');

    };

接着上述问题答案提问,1)直接在对象的原型上添加方法是否安全?尤为是在Object对象上。(这个我没能答出?但愿知道的说一下。) 2)函数声明与函数表达式的区别?

答案:在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并不是是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码以前可用(能够访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。

1七、定义一个log方法,让它能够代理console.log的方法。

可行的方法一:

function log(msg) {

    console.log(msg);

}

log("hello world!") // hello world!

若是要传入多个参数呢?显然上面的方法不能知足要求,因此更好的方法是:

function log(){

    console.log.apply(console, arguments);

};

到此,追问apply和call方法的异同。

对于apply和call二者在做用上是相同的,便是调用一个对象的一个方法,以另外一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

但二者在参数上有区别的。对于第一个参数意义都同样,但对第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则做为call的参数传入(从第二个参数开始)。 如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 。

1八、在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):没法直接调用数组方法或指望length属性有什么特殊的行为,但仍能够对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。能够使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

假设接第八题题干,咱们要给每一个log方法添加一个”(app)”前缀,好比’hello world!’ ->’(app)hello world!’。方法以下:

function log(){

      var args = Array.prototype.slice.call(arguments);  //为了使用unshift数组方法,将argument转化为真正的数组

      args.unshift('(app)');

      console.log.apply(console, args);

    };

1九、对做用域上下文和this的理解,看下列代码:

var User = {

  count: 1,

  getCount: function() {

    return this.count;

  }

};

console.log(User.getCount());  // what?

var func = User.getCount;

console.log(func());  // what?

问两处console输出什么?为何?

答案是1和undefined。

func是在winodw的上下文中被执行的,因此会访问不到count属性。

继续追问,那么如何确保Uesr老是能访问到func的上下文,即正确返回1。正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码以下:

Function.prototype.bind = Function.prototype.bind || function(context){

   var self = this;

   return function(){

      return self.apply(context, arguments);

   };

}

var func = User.getCount.bind(User);

console.log(func());

20、原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不一样?如何用原生JS实现Jq的ready方法?

window.onload()方法是必须等到页面内包括图片的全部元素加载完毕后才能执行。

$(document).ready()是DOM结构绘制完毕后就执行,没必要等到加载完毕。

/*

 * 传递函数给whenReady()

 * 当文档解析完毕且为操做准备就绪时,函数做为document的方法调用

 */

var whenReady = (function() {               //这个函数返回whenReady()函数

    var funcs = [];             //当得到事件时,要运行的函数

    var ready = false;          //当触发事件处理程序时,切换为true

    //当文档就绪时,调用事件处理程序

    function handler(e) {

        if(ready) return;       //确保事件处理程序只完整运行一次

        //若是发生onreadystatechange事件,但其状态不是complete的话,那么文档还没有准备好

        if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {

            return;

        }

        //运行全部注册函数

        //注意每次都要计算funcs.length

        //以防这些函数的调用可能会致使注册更多的函数

        for(var i=0; i<funcs.length; i++) {

            funcs[i].call(document);

        }

        //事件处理函数完整执行,切换ready状态, 并移除全部函数

        ready = true;

        funcs = null;

    }

    //为接收到的任何事件注册处理程序

    if(document.addEventListener) {

        document.addEventListener('DOMContentLoaded', handler, false);

        document.addEventListener('readystatechange', handler, false);            //IE9+

        window.addEventListener('load', handler, false);

    }else if(document.attachEvent) {

        document.attachEvent('onreadystatechange', handler);

        window.attachEvent('onload', handler);

    }

    //返回whenReady()函数

    return function whenReady(fn) {

        if(ready) { fn.call(document); }

        else { funcs.push(fn); }

    }

})();

若是上述代码十分难懂,下面这个简化版:

function ready(fn){

    if(document.addEventListener) {//标准浏览器

        document.addEventListener('DOMContentLoaded', function() {

            //注销事件, 避免反复触发

            document.removeEventListener('DOMContentLoaded',arguments.callee, false);

            fn();//执行函数

        }, false);

    }else if(document.attachEvent) {//IE

        document.attachEvent('onreadystatechange', function() {

            if(document.readyState == 'complete') {

                document.detachEvent('onreadystatechange', arguments.callee);

                fn();//函数执行

            }

        });

    }

};

2一、(设计题)想实现一个对页面某个节点的拖曳?如何作?(使用原生JS)

回答出概念便可,下面是几个要点

1. 给须要拖拽的节点绑定mousedown, mousemove, mouseup事件

2. mousedown事件触发后,开始拖拽

3. mousemove时,须要经过event.clientX和clientY获取拖拽位置,并实时更新位置

4. mouseup时,拖拽结束

5. 须要注意浏览器边界的状况

2二、请实现以下功能

 

 function setcookie(name,value,days){  //给cookie增长一个时间变量

  var exp = new Date();

  exp.setTime(exp.getTime() + days*24*60*60*1000); //设置过时时间为days天

  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();

}

function getCookie(name){

  var result = "";

  var myCookie = ""+document.cookie+";";

  var searchName = "+name+"=";

  var startOfCookie = myCookie.indexOf(searchName);

  var endOfCookie;

  if(satrtOfCookie != -1){

    startOfcookie += searchName.length;

    endOfCookie = myCookie.indexOf(";",startOfCookie);

    result = (myCookie.substring(startOfCookie,endOfCookie));

  }

  return result;

}

(function(){

  var oTips = document.getElementById('tips');//假设tips的id为tips

  var page = {

  check: function(){//检查tips的cookie是否存在而且容许显示

    var tips = getCookie('tips');

    if(!tips || tips == 'show') return true;//tips的cookie不存在

    if(tips == "never_show_again") return false;

  },

  hideTip: function(bNever){

    if(bNever) setcookie('tips', 'never_show_again', 365);

    oTips.style.display = "none";//隐藏

  },

  showTip: function(){

  oTips.style.display = "inline";//显示,假设tips为行级元素

  },

  init: function(){

    var _this = this;

    if(this.check()){

    _this.showTip();

    setcookie('tips', 'show', 1);

  }

  oTips.onclick = function(){

    _this.hideTip(true);

  };

  }

  };

  page.init();

})();

2三、说出如下函数的做用是?空白区域应该填写什么?

//define

(function(window){

    function fn(str){

        this.str=str;

    }

 

    fn.prototype.format = function(){

        var arg = ______;

        return this.str.replace(_____,function(a,b){

             return arg[b]||"";

      });

    }

    window.fn = fn;

})(window);

 

//use

(function(){

    var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');

    console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));

})();

答案:访函数的做用是使用format函数将函数的参数替换掉{0}这样的内容,返回一个格式化后的结果:

第一个空是:arguments

第二个空是:/\{(\d+)\}/ig

2四、Javascript做用链域?

理解变量和函数的访问范围和生命周期,全局做用域与局部做用域的区别,JavaScript中没有块做用域,函数的嵌套造成不一样层次的做用域,嵌套的层次造成链式形式,经过做用域链查找属性的规则须要深刻理解。

2五、谈谈This对象的理解。

理解不一样形式的函数调用方式下的this指向,理解事件函数、定时函数中的this指向,函数的调用形式决定了this的指向。

2六、eval是作什么的?

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

 

2七、关于事件,IE与火狐的事件机制有什么区别? 如何阻止冒泡?

[1].在IE中,事件对象是做为一个全局变量来保存和维护的.全部的浏览器事件,无论是用户触发的,仍是其余事件,都会更新window.event对象.因此在代码中,只要调用window.event就能够获取事件对象, 再event.srcElement就能够取得触发事件的元素进行进一步处理.

[2].在FireFox中,事件对象却不是全局对象,通常状况下,是现场发生,现场使用,FireFox把事件对象自动传给事件处理程序.

关于事件的兼容性处理要熟练掌握,事件对象具体哪些属性存在兼容性问题,IE与标准事件模型事件冒泡与事件捕获的支持要理解

2八、什么是闭包(closure),为何要用它?

简单的理解是函数的嵌套造成闭包,闭包包括函数自己已经它的外部做用域

使用闭包能够造成独立的空间,延长变量的生命周期,报存中间状态值

2九、javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

意思是使用严格模式,使用严格模式,一些不规范的语法将再也不支持

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

Instanceof   constructor

3一、new操做符具体干了什么呢?

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

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

  三、新建立的对象由 this 所引用,而且最后隐式的返回 this 。

3二、用原生JavaScript的实现过什么功能吗?

主要考察原生js的实践经验

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

HasOwnProperty

3四、对JSON的了解?

轻量级数据交互格式,能够造成复杂的嵌套格式,解析很是方便

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

方案一:<script>标签的async="async"属性(详细参见:script标签的async属性)

方案二:<script>标签的defer="defer"属性

方案三:动态建立<script>标签

方案四:AJAX eval(使用AJAX获得脚本内容,而后经过eval_r(xmlhttp.responseText)来运行脚本)

方案五:iframe方式

3六、模块化开发怎么作?

理解模块化开发模式:浏览器端requirejs,seajs;服务器端nodejs;ES6模块化;fis、webpack等前端总体模块化解决方案;grunt、gulp等前端工做流的使用

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

理解这两种规范的差别,主要经过requirejs与seajs的对比,理解模块的定义与引用方式的差别以及这两种规范的设计原则

3八、requireJS的核心原理是什么?(如何动态加载的?如何避免屡次加载的?如何 缓存的?)

核心是js的加载模块,经过正则匹配模块以及模块的依赖关系,保证文件加载的前后顺序,根据文件的路径对加载过的文件作了缓存

3九、让你本身设计实现一个requireJS,你会怎么作?

核心是实现js的加载模块,维护js的依赖关系,控制好文件加载的前后顺序

40、谈一谈你对ECMAScript6的了解?

ES6新的语法糖,类,模块化等新特性

4一、ECMAScript6 怎么写class么,为何会出现class这种东西?

class Point {

  constructor(x, y) {

    this.x = x;

    this.y = y;

  }

  toString() {

     return '('+this.x+', '+this.y+')';

  }

}

4二、异步加载的方式有哪些?

方案一:<script>标签的async="async"属性(详细参见:script标签的async属性)

方案二:<script>标签的defer="defer"属性

方案三:动态建立<script>标签

方案四:AJAX eval(使用AJAX获得脚本内容,而后经过eval_r(xmlhttp.responseText)来运行脚本)

方案五:iframe方式

4三、documen.write和 innerHTML的区别?

document.write是重写整个document, 写入内容是字符串的html

innerHTML是HTMLElement的属性,是一个元素的内部html内容

4四、DOM操做——怎样添加、移除、移动、复制、建立和查找节点?

(1)建立新节点

      createDocumentFragment()    //建立一个DOM片断

      createElement_x()   //建立一个具体的元素

      createTextNode()   //建立一个文本节点

(2)添加、移除、替换、插入

      appendChild()

      removeChild()

      replaceChild()

      insertBefore()

(3)查找

      getElementsByTagName()    //经过标签名称

      getElementsByName()    //经过元素的Name属性的值

      getElementById()    //经过元素Id,惟一性

4五、call() 和 .apply() 的含义和区别?

apply的参数是数组形式,call的参数是单个的值,除此以外在使用上没有差异,重点理解这两个函数调用的this改变

4六、数组和对象有哪些原生方法,列举一下?

Array.concat( ) 链接数组

Array.join( ) 将数组元素链接起来以构建一个字符串

Array.length 数组的大小

Array.pop( ) 删除并返回数组的最后一个元素

Array.push( ) 给数组添加元素

Array.reverse( ) 颠倒数组中元素的顺序

Array.shift( ) 将元素移出数组

Array.slice( ) 返回数组的一部分

Array.sort( ) 对数组元素进行排序

Array.splice( ) 插入、删除或替换数组的元素

Array.toLocaleString( ) 把数组转换成局部字符串

Array.toString( ) 将数组转换成一个字符串

Array.unshift( ) 在数组头部插入一个元素

 

Object.hasOwnProperty( ) 检查属性是否被继承

Object.isPrototypeOf( ) 一个对象是不是另外一个对象的原型

Object.propertyIsEnumerable( ) 是否能够经过for/in循环看到属性

Object.toLocaleString( ) 返回对象的本地字符串表示

Object.toString( ) 定义一个对象的字符串表示

Object.valueOf( ) 指定对象的原始值

4七、JS 怎么实现一个类。怎么实例化这个类

严格来说js中并无类的概念,不过js中的函数能够做为构造函数来使用,经过new来实例化,其实函数自己也是一个对象。

4八、JavaScript中的做用域与变量声明提高?

理解JavaScript的预解析机制,js的运行主要分两个阶段:js的预解析和运行,预解析阶段全部的变量声明和函数定义都会提早,可是变量的赋值不会提早

4九、如何编写高性能的Javascript?

使用 DocumentFragment 优化屡次 append

经过模板元素 clone ,替代 createElement

使用一次 innerHTML 赋值代替构建 dom 元素

使用 firstChild 和 nextSibling 代替 childNodes 遍历 dom 元素

使用 Array 作为 StringBuffer ,代替字符串拼接的操做

将循环控制量保存到局部变量

顺序无关的遍历时,用 while 替代 for

将条件分支,按可能性顺序从高到低排列

在同一条件子的多( >2 )条件分支时,使用 switch 优于 if

使用三目运算符替代条件分支

须要不断执行的时候,优先考虑使用 setInterval

50、那些操做会形成内存泄漏?

闭包,循环

5一、javascript对象的几种建立方式?

1. 工厂模式

2. 构造函数模式

3. 原型模式

4. 混合构造函数和原型模式

5. 动态原型模式

6. 寄生构造函数模式

7. 稳妥构造函数模式

5二、javascript继承的 6 种方法?

1. 原型链继承

2. 借用构造函数继承

3. 组合继承(原型+借用构造)

4. 原型式继承

5. 寄生式继承

6. 寄生组合式继承

5三、eval是作什么的?

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

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

5四、JavaScript 原型,原型链 ? 有什么特色?

1. 原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有本身的原型,若是一个原型对象的原型不为 null 的话,咱们就称之为原型链

2. 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链

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

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

2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件

3. ev.stopPropagation();

注意旧ie的方法:ev.cancelBubble = true;

5六、简述一下Sass、Less,且说明区别?

他们是动态的样式语言,是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。

变量符不同,less是@,而Sass是$;

Sass支持条件语句,能够使用if{}else{},for{}循环等等。而Less不支持;

Sass是基于Ruby的,是在服务端处理的,而Less是须要引入less.js来处理Less代码输出Css到浏览器

5七、关于javascript中apply()和call()方法的区别?

相同点:两个方法产生的做用是彻底同样的

不一样点:方法传递的参数不一样

Object.call(this,obj1,obj2,obj3)

Object.apply(this,arguments)

apply()接收两个参数,一个是函数运行的做用域(this),另外一个是参数数组。

call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。

5八、简述一下JS中的闭包?

闭包用的多的两个做用:读取函数内部的变量值;让这些变量值始终保存着(在内存中)。

同时须要注意的是:闭包慎用,不滥用,不乱用,因为函数内部的变量都被保存在内存中,会致使内存消耗大。

5九、说说你对this的理解?

在JavaScript中,this一般指向的是咱们正在执行的函数自己,或者是,指向该函数所属的对象。

全局的this → 指向的是Window

函数中的this → 指向的是函数所在的对象

对象中的this → 指向其自己

60、分别阐述split(),slice(),splice(),join()?

join()用于把数组中的全部元素拼接起来放入一个字符串。所带的参数为分割字符串的分隔符,默认是以逗号分开。归属于Array

split()即把字符串分离开,以数组方式存储。归属于Stringstring

slice() 方法可从已有的数组中返回选定的元素。该方法并不会修改数组,而是返回一个子数组。若是想删除数组中的一段元素,应该使用方法 Array.splice()

splice() 方法向/从数组中添加/删除项目,而后返回被删除的项目。返回的是含有被删除的元素的数组。

6一、事件委托是什么?

让利用事件冒泡的原理,让本身的所触发的事件,让他的父元素代替执行!

6二、如何阻止事件冒泡和默认事件?

阻止浏览器的默认行为

window.event?window.event.returnValue=false:e.preventDefault();

中止事件冒泡

window.event?window.event.cancelBubble=true:e.stopPropagation();

原生JavaScript中,return false;只阻止默认行为,不阻止冒泡,jQuery中的return false;既阻止默认行为,又阻止冒泡

6三、添加 删除 替换 插入到某个接点的方法?

obj.appendChidl()

obj.removeChild()

obj.replaceChild()

obj.innersetBefore()

6四、你用过require.js吗?它有什么特性?

(1)实现js文件的异步加载,避免网页失去响应;

(2)管理模块之间的依赖性,便于代码的编写和维护。

6五、谈一下JS中的递归函数,而且用递归简单实现阶乘?

递归便是程序在执行过程当中不断调用自身的编程技巧,固然也必需要有一个明确的结束条件,否则就会陷入死循环。

6六、请用正则表达式写一个简单的邮箱验证。

/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

6七、简述一下你对web性能优化的方案?

    一、尽可能减小 HTTP 请求

二、使用浏览器缓存

三、使用压缩组件

四、图片、JS的预载入

五、将脚本放在底部

六、将样式文件放在页面顶部

七、使用外部的JS和CSS

八、精简代码

6八、在JS中有哪些会被隐式转换为false

Undefined、null、关键字false、NaN、零、空字符串

6九、定时器setInterval有一个有名函数fn1,setInterval(fn1,500)与setInterval(fn1(),500)有什么区别?

第一个是重复执行每500毫秒执行一次,后面一个只执行一次。

70、外部JS文件出现中文字符,会出现什么问题,怎么解决?

会出现乱码,加charset=”GB2312”;

7一、谈谈浏览器的内核,而且说一下什么是内核?

Trident (['traɪd(ə)nt])--IE,Gecko (['gekəʊ])--Firefox, Presto (['prestəʊ])--opera,webkit—谷歌和Safari

浏览器内核又能够分红两部分:渲染引擎和 JS 引擎。它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,而后会输出至显示器或打印机。JS 引擎则是解析 Javascript 语言,执行 javascript 语言来实现网页的动态效果。

7二、JavaScript原型,原型链 ? 有什么特色?

*  原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有本身的原型,若是一个原型对象的原型不为null的话,咱们就称之为原型链。

*  原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

* JavaScript的数据对象有那些属性值?

  writable:这个属性的值是否能够改。

  configurable:这个属性的配置是否能够删除,修改。

  enumerable:这个属性是否能在for…in循环中遍历出来或在Object.keys中列举出来。

  value:属性值。

* 当咱们须要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 若是没有的话,就会查找他的Prototype对象是否有这个属性。

 function clone(proto) {

  function Dummy() { }

  Dummy.prototype = proto;

  Dummy.prototype.constructor = Dummy;

  return new Dummy(); //等价于Object.create(Person);

 }

        function object(old) {

         function F() {};

         F.prototype = old;

         return new F();

        }

    var newObj = object(oldObject);

7三、写一个通用的事件侦听器函数

`// event(事件)工具集,来源:https://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;

    }

};

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

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

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

 3.  ev.stopPropagation();

7五、什么是闭包(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 

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

使用instanceof (待完善)

if(a instanceof Person){

    alert('yes');

}

7七、new操做符具体干了什么呢?

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

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

  三、新建立的对象由 this 所引用,而且最后隐式的返回 this 。

    var obj  = {};

    obj.__proto__ = Base.prototype;

    Base.call(obj);

7八、JSON 的了解

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

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

7九、js延迟加载的方式有哪些

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

80、模块化怎么作?

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

var module1 = (function(){

    var _count = 0;

    var m1 = function(){

      //...

    };

    var m2 = function(){

      //...

    };

    return {

      m1 : m1,

      m2 : m2

    };

  })();

8一、异步加载的方式

  (1) defer,只支持IE

  (2) async:

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

      documen.write和 innerHTML的区别

      document.write只能重绘整个页面

      innerHTML能够重绘页面的一部分

8二、告诉我答案是多少?

(function(x){

    delete x;

    alert(x);

})(1+5);

函数参数没法delete删除,delete只能删除经过for in访问的属性。

固然,删除失败也不会报错,因此代码运行会弹出“1”。

8三、JS中的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); 

8四、Jquery与jQuery UI 有啥区别?

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

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

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

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

jQuery中没有提供这个功能,因此你须要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {

        return JSON.stringify(array)

    }

    $.fn.parseArray = function(array) {

        return JSON.parse(array)

    }

    而后调用:

    $("").stringifyArray(array)

8六、JavaScript中的做用域与变量声明提高?

其余部分

(HTTP、正则、优化、重构、响应式、移动端、团队协做、SEO、UED、职业生涯)

    *基于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++) {}

8七、前端开发的优化问题(看雅虎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布局慢。

8八、http状态码有那些?分别表明是什么意思?

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

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

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

400-499 用于指出客户端的错误。

400  语义有误,当前请求没法被服务器理解。

401  当前请求须要用户验证

403  服务器已经理解请求,可是拒绝执行它。

500-599 用于支持服务器错误。

503 – 服务不可用

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

    要熟悉先后端的通讯流程,最好把动态网站的背后细节也介绍一遍

8、流行框架

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

考察学习知识的态度,是否仅仅是停留在使用层面,要知其然知其因此然

二、jQuery.fn的init方法返回的this指的是什么对象?为何要返回this?

this执行init构造函数自身,其实就是jQuery实例对象,返回this是为了实现jQuery的链式操做

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

$.parseJSON('{"name":"John"}');

四、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

递归赋值

五、jquery.extend 与 jquery.fn.extend的区别?

Jquery.extend用来扩展jQuery对象自己;jquery.fn.extend用来扩展jQuery实例

六、谈一下Jquery中的bind(),live(),delegate(),on()的区别?

七、JQuery一个对象能够同时绑定多个事件,这是如何实现的?

能够同时绑定多个事件,低层实现原理是使用addEventListner与attachEvent兼容处理作事件注册

十、    Jquery与jQuery UI有啥区别?

jQuery是操做dom的框架,jQueryUI是基于jQuery作的一个UI组件库

十一、    jQuery和Zepto的区别?各自的使用场景?

jQuery主要用于pc端,固然有对应的jQuerymobile用于移动端,zepto比jQuery更加小巧,主要用于移动端

十二、    针对 jQuery 的优化方法?

优先使用ID选择器

在class前使用tag(标签名)

给选择器一个上下文

慎用 .live()方法(应该说尽可能不要使用)

使用data()方法存储临时变量

1三、    Zepto的点透问题如何解决?

点透主要是因为两个div重合,例如:一个div调用show(),一个div调用hide();这个时候当点击上面的div的时候就会影响到下面的那个div;

解决办法主要有2种:

1.github上有一个叫作fastclick的库,它也能规避移动设备上click事件的延迟响应,https://github.com/ftlabs/fastclick

将它用script标签引入页面(该库支持AMD,因而你也能够按照AMD规范,用诸如require.js的模块加载器引入),而且在dom ready时初始化在body上,

2.根据分析,若是不引入其它类库,也不想本身按照上述fastclcik的思路再开发一套东西,须要1.一个优先于下面的“divClickUnder”捕获的事件;2.而且经过这个事件阻止掉默认行为(下面的“divClickUnder”对click事件的捕获,在ios的safari,click的捕获被认为和滚屏、点击输入框弹起键盘等同样,是一种浏览器默认行为,便可以被event.preventDefault()阻止的行为)。

十二、知道各类JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优势和缺点么?

知识面的宽度,流行框架要多多熟悉

1三、Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?

Underscore的熟悉程度

1四、使用过angular吗?angular中的过滤器是干什么用的

在表达式中转换数据<p>姓名为 {{ lastName | uppercase }}</p>

currency,是什么过滤器——格式化数字为货币格式,单位是$符。

 

9、移动APP开发

一、移动端最小触控区域是多大?

移动端的点击事件的有延迟,时间是多久,为何会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是否是要双击操做。)

10、NodeJs

一、对Node的优势和缺点提出了本身的见解:

*(优势)由于Node是基于事件驱动和无阻塞的,因此很是适合处理并发请求,

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

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

所以客户端和服务器端都用同一种语言编写,这是很是美妙的事情。

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

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

二、需求:实现一个页面操做不会整页刷新的网站,而且能在浏览器前进、后退时正确响应。给出你的技术实现方案?

至少给出本身的思路(url-hash,能够使用已有的一些框架history.js等)

六、Node.js的适用场景?

1)、实时应用:如在线聊天,实时通知推送等等(如socket.io)

2)、分布式应用:经过高效的并行I/O使用已有的数据

3)、工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序

4)、游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)

5)、利用稳定接口提高Web渲染能力

6)、先后端编程语言环境统一:前端开发人员能够很是快速地切入到服务器端的开发(如著名的纯Javascript全栈式MEAN架构)

四、(若是会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

Nodejs相关概念的理解程度

七、解释一下 Backbone 的 MVC 实现方式?

流行的MVC架构模式

八、什么是“前端路由”?何时适合使用“前端路由”? “前端路由”有哪些优势和缺点?

熟悉先后端通讯相关知识

七、对Node的优势和缺点提出了本身的见解?

优势:

1. 由于Node是基于事件驱动和无阻塞的,因此很是适合处理并发请求,所以构建在Node上的代理服务器相比其余技术实现(如Ruby)的服务器表现要好得多。

2. 与Node代理服务器交互的客户端代码是由javascript语言编写的,所以客户端和服务器端都用同一种语言编写,这是很是美妙的事情。

缺点:

1. Node是一个相对新的开源项目,因此不太稳定,它老是一直在变。

2. 缺乏足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子(第三方库如今已经很丰富了,因此这个缺点能够说不存在了)。

 

11、前端归纳性问题

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

使用率较高的框架有jQuery、YUI、Prototype、Dojo、Ext.js、Mootools等。尤为是jQuery,超过91%。

轻量级框架有Modernizr、underscore.js、backbone.js、Raphael.js等。(理解这些框架的功能、性能、设计原理)

前端开发工具:Sublime Text 、Eclipse、Notepad、Firebug、HttpWatch、Yslow。

开发过的插件:城市选择插件,汽车型号选择插件、幻灯片插件。弹出层。(写过开源程序,加载器,js引擎更好)

九、对BFC规范的理解?

Formatting Context:指页面中的一个渲染区域,而且拥有一套渲染规则,他决定了其子元素如何定位,以及与其余元素的相互关系和做用。

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

网站重构:应用web标准进行设计(第2版)

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

    html5 websoket

    WebSocket经过Flash

    XHR长时间链接

    XHR Multipart Streaming

    不可见的Iframe

<script>标签的长时间链接(可跨域)

五、加班的见解

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

六、平时如何管理你的项目,如何设计突发大规模并发架构?

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

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

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

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

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

JS 分文件夹存放 命民以该JS 功能为准英文翻译;

图片采用整合的 images.png png8 格式文件使用 尽可能整合在一块儿使用方便未来的管理

七、那些操做会形成内存泄漏?

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

垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。

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

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

八、你说你热爱前端,那么应该WEB行业的发展很关注吧? 说说最近最流行的一些东西吧?

Node.js、Mongodb、npm、MVVM、MEAN、react、angularjs

九、你有了解咱们公司吗?说说你的认识?

由于我想去阿里,因此我针对阿里的说

最羡慕就是在双十一购物节,350.19亿元,每分钟支付79万笔。海量数据,竟然无一漏单、无一故障。太厉害了。

十、    移动端(好比:Android IOS)怎么作好用户体验?

融入本身的设计理念,注重用户体验,选择合适的技术

十一、    你所知道的页面性能优化方法有那些?

压缩、合并,减小请求,代码层析优化。。。

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

知识面宽度,最好熟悉一些后台语言,好比php,展示出本身的技术两点

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

1四、谈谈你认为怎样作能使项目作的更好?

考虑问题的深刻,不只仅停留在完成任务上,要精益求精

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

表现出对前端的认同与兴趣,关注相关技术前沿

1六、php中下面哪一个函数能够打开一个文件,以对文件进行读和写操做?

A.fget();B.file_open();C.fopen();D.open_file();

1七、php中rmdir能够直接删除文件夹吗?该目录必须是空的,并且要有相应的权限--来自api

A.任何文件夹均可以删除           B.空文件夹能够删除

C.有权限的任何文件夹均可以删除   D.有权限的空文件夹能够删除

1八、phpinset和empty的区别,举例说明

一、empty函数

用途:检测变量是否为空

判断:若是 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,若是 var 为空,则返回 TRUE。注意:empty() 只检测变量,检测任何非变量的东西都将致使解析错误。换句话说,后边的语句将不会起做用;

二、isset函数

用途:检测变量是否设置

判断:检测变量是否设置,而且不是 NULL。若是已经使用 unset() 释放了一个变量以后,它将再也不是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个NULL 字节("\0")并不等同于 PHP 的 NULL 常数。

1九、php中$_SERVER变量中如何获得当前执行脚本路劲

 

20、写一个php函数,要求两个日期字符串的天数差,如2012-02-05~2012-03-06的日期差数

2一、一个衣柜中放了许多杂乱的衬衫,若是让你去整理一下,使得更容易找到你想要的衣服;你会怎么作?请写出你的作法和思路?

2二、如何优化网页加载速度?

   1.减小css,js文件数量及大小(减小重复性代码,代码重复利用),压缩CSS和Js代码

   2.图片的大小

   3.把css样式表放置顶部,把js放置页面底部

   4.减小http请求数

   5.使用外部 Js 和 CSS

2三、工做流程,你怎么来实现页面设计图,你认为前端应该如何高质量完成工做?

熟悉相关设计规范,本身总结的一些经验

2四、介绍项目经验、合做开发、独立开发。

团队协做,我的能力。实践经验

2五、开发过程当中遇到困难,如何解决。

考察解决问题的能力

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

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

    一、实现界面交互

    二、提高用户体验

    三、有了Node.js,前端能够实现服务端的一些事情

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

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

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

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

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

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

其它相关的加分项:

1. 都使用和了解过哪些编辑器?都使用和了解过哪些平常工具?

2. 都知道有哪些浏览器内核?开发过的项目都兼容哪些浏览器?

3. 瀑布流布局或者流式布局是否有了解

4. HTML5都有哪些新的API?

5. 都用过什么代码调试工具?

6. 是否有接触过或者了解太重构。

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