经典面试题:
21.XHTML和HTML有什么区别?
XHTML(Extensible HyperText Markup Language-可扩展超文本标记语言):表现方式和HTML类似,但是语法比HTML严格。
HTML(HyperText Markup Language-超文本标记语言):基于标准通用标记语言(SGML)的应用,她是一种规范,由HTML命令组成的描述性文本,HTML 可以说明文字、 图形、动画、声音、表格、链接等。 HTML的结构包括头部 (Head)、主体 (Body) 两大部分。
区别:
XHTML 元素必须被正确地嵌套,HTML元素不一定
XHTML 元素必须被关闭,空标签也必须被关闭。
XHTML 标签名必须用小写字母
XHTML每一个属性都必须使用引号包住
XHTML 用 id 属性代替 name 属性
22.什么是语义化的HTML?
语义化:顾名思义,就是对数据和信息进行处理,使得机器可以理解。用合理的HTML标记以及其特有的属性去格式化文档内容。开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。
比如HTML5的新标签,header可以看出是网站头部信息,footer元素可以看出是网站底部信息,section元素是某一段或某一节内容,元素的id属性也可以赋予语义化。
23.常见的浏览器内核有哪些?
Trident内核:IE浏览器的内核,是微软开发的一种排版引擎。
Gecko内核:是Firefox浏览器的内核,以C++编写的网页排版引擎。
WebKit内核:Safari和Chrome浏览器的内核, 特点在于源码结构清晰、渲染速度极快。缺点是对网页代码的兼容性不高,导致一些编写不标准的网页无法正常显示。
Presto内核:Opera浏览器的内核。
24.HTML5有哪些新特性?移除了哪些元素?如何处理HTML新标签的浏览器兼容问题?如何区分HTML和HTML5
HTML5新特性:
- 1.新的文档类型 (New Doctype)。使用。
- 2.语义化的HTML元素。
- 3.视频和音频。video和audio
- 4.HTML5拖放。拖放(Drag 和 drop)是 HTML5 标准的组成部分。
- 5.Canvas。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
- 6.SVG。可伸缩矢量图形,使用 XML 格式定义图形。
- 7.地理定位。geolocation属性。
- 8.Web 存储。localStorage 和sessionStorage。
- 9.离线缓存。通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。
- 10.Web Workers。运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。
移除的元素:acronym,applet,basefont,big,center,dir,font,frame,frameset,noframes,strike,tt
兼容性问题处理:
- 1.使用document.createElement()创建HTML5的元素。
- 2.使用html5shiv。
如何区分HTML和HTML5:
- 1.HTML和HTML5的文档声明不同。
- 2.他们的标签不一样,HTML5的标签更语义化。
思考题:
11.前端开发有哪些经典的轮子值得自己去实现一遍? 首选肯定是jQuery,经典的dom选择器,可以自己实现一下基本的功能。还有可以造一些用于前端性能测试的轮子,模板引擎轮子也可以造一下,当然还有最火的virtual DOM了。
12.日常开发中有哪些遇到过的常用布局是无法用纯css实现的? 这方面接触的不是很多,只知道响应式流式布局好像CSS不好直接实现,需要js来计算屏幕的不同分辨率。
编程题:
1.将函数 fn 的执行上下文改为 obj,返回 fn 执行后的值
//输入:
function () {
return this.greeting + ', ' + this.name + '!!!';
}, {greeting: 'Hello', name: 'Rebecca'}
//输出:
Hello, Rebecca!!!
//思路:改变一个函数执行的上下文,可以使用call或者是apply
function speak(fn, obj) {
return fn.call(obj);
}
2.要求 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num
//这题有点简单了。
function fizzBuzz(num) {
if(!num||isNaN(num)){
return false;
}
else if (num % 3 == 0 && num % 5 == 0) {
return "fizzbuzz";
} else if (num % 3 == 0) {
return "fizz";
} else if (num % 5 == 0) {
return "buzz";
} else {
return num;
}
}
3.返回函数
实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f 2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ‘, ’ 3、所有函数的参数数量为 1,且均为 String 类型
//输入:
functionFunction('Hello')('world')
//输出
Hello, world
思路:运用一个闭包就可以了,把f函数引入外部的函数变量str
function functionFunction(str) {
var f = function(){
return str+", "+arguments[0];
}
return f;
}