ECMAScript+ 面试宝典

HTML

基础§

HTML5 有哪些新特性?§

  • 主要是关于图像,位置,存储,多任务等功能的增加。
  • 文件类型声明只有一种:<!DOCTYPE HTML>
  • 新增特性:
    • 新增的语义化标签:header / nav / article/ section/ aside / footer / progress / meter / command /datalist / details / embed / figcaption / figure / hgroup / keygen / mark / output / rp / rt / ruby / source / summary / wbr
    • 表单控件: calendardatetimeemailurlsearch
    • 用于媒介回放的 videoaudio 元素。
    • 定义图形的 canvas 元素。
    • 新的技术:webworker, websocket, Geolocation
    • 新的局部属性:ping (用于 a 与 area)charset (用于 meta)async (用于 script)
    • 新的全局属性:idtabindexrepeatcontextmenudraggabledropzonehiddenspellcheck
    • 提供了本地存储方案:
      • localStorage 用于持久化的本地存储,数据永远不会过期,关闭浏览器也不会丢失。
      • sessionStorage 同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此 sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
  • 移除特性:
    • 纯表现的元素:
      • <basefont>; <font>; <center>; <u>; <big>; <strike>; <tt>
    • 框架集:<frameset>; <noframes>; <frame>;
    • acronymappletdirisindex
  • 如何区分 HTML 和 HTML5
    • 文档类型声明方式 DocType 不同:HTML4.01 和 XHTML1.0 有三种模式的写法;HTML 只有一种。
    • 结构语义:html 4.0 没有体现结构语义化的标签,html5 添加了许多具有语义化的标签。
    • html5 具有特色功能,比如直接在网页用 video、audio 播放多媒体等。

行内元素、块级元素、空元素都有哪些?§

  • 常用块级元素:<h1~h6>; <p>; <div>; <form>; <ol>; <ul>; <table>; <vedio>; <audio>; <header>; <footer>
  • 常用行内元素:button; input; span; a; img; lable; select; textarea; i
  • 空元素(没有内容的 HTML 元素):<br>; <link>; <meta>; <img>; <input>; <hr>; <col>
  • 块级元素和行内元素的区别:
    • 块级元素默认情况下会以新行开始,块级元素占据其父元素(容器)的整个空间,可以设置宽高;
    • 行内元素只占据它对应标签的边框所包含的空间,默认情况下不会以新行开始,不可以设置宽高。
  • 块级元素和行内元素的切换:通过修改 display 属性来切换块级元素和行内元素。
    • display:inline; 属性则变为行内元素。
    • display:block; 属性则变为块级元素。

HTML5 语义化标签有哪些?§

  • 语义化让页面具有良好的结构和含义。
  • 语义化的好处:
    • 开发者友好:使用语义类标签增强了可读性,开发者也能够清晰地看出网页的结构,也更为便于团队的开发和维护
    • 机器友好:带有语义的文字表现力丰富,更适合搜索引擎的爬虫爬取有效信息,语义类还可以支持读屏软件,根据文章可以自动生成目录。
语义化标签 作用 示例
article 装载显示一个独立的文章内容,可以嵌套 一篇完整的论坛帖子、一则网站新闻、一篇博客文章
section 定义文档中的节/区段 章节、页眉、页脚
aside 用来装载非正文类的内容 广告、成组的链接、侧边栏
hgroup 用于对网页或区段的标题元素(h1-h6)进行组合 连续的 h 系列的标签元素可以用 hgroup 将他们括起来
header 定义文档的页面组合 一些引导和导航信息
footer 定义 section 或 document 的页脚 典型时可包含创作者的姓名、文档的创作日期以及/或者联系信息。
nav 定义显示导航链接。不是所有的成组的超级链接都需要放在nav标签里。nav标签里应该放入一些当前页面的主要导航链接 在页脚显示一个站点的导航链接(如首页,服务信息页面,版权信息页面等等)
time 定义公历的时间(24 小时制)或日期,时间和时区偏移是可选的。该元素能够以机器可读的方式对日期和时间进行编码 用户代理能够把生日提醒或排定的事件添加到用户日程表中,搜索引擎也能够生成更智能的搜索结果
mark 定义带有记号的文本 请在需要突出显示文本时使用 标签
figure 规定独立的流内容。figure 元素的内容应该与主内容相关,但如果被删除,则不应对文档流产生影响。 独立流内容如图像、图表、照片、代码等等
figcaption 定义 figure 元素的标题(caption) "figcaption" 元素应该被置于 "figure" 元素的第一个或最后一个子元素的位置
contextmenu 添加到系统右键菜单 貌似这个功能只有 firefox 支持

src 和 href 的区别?§

  • src:
    • 指向外部资源的位置
    • 指向的内容会嵌入到文档中当前标签所在的位置
    • 在请求 src 资源时会将其指向的资源下载应用到文档内(如 js 脚本、img 图片、frame 元素等)
    • 当浏览器解析到该元素时,一般会暂停其它资源的下载和处理,知道将该资源加载、编译、执行完毕,所以一般 js 脚本会放在底部而不是头部。(script 标签下的 defer 和 async 时例外)
  • href:指向网络资源所在位置的超链接,用来建立和当前元素或文档之前的连接,当浏览器识别到它指向的文件时,就会并行下载资源,不会停止对当前文档的处理。

什么是 SGML/XML/XHTML?§

  • SGML:

    • HTML5 开始不再基于 SGML
  • HTML 与 XHTML(可拓展超文本标记语言) 的区别

    • XHTML 元素必须被正确地嵌套,HTML 不需要被正确嵌套也不会报错
    • XHTML 元素必须被关闭(空标签也必须被关闭),HTML 空标签不需要被关闭
    • XHTML标签名必须用小写字母,HTML 可以大写
    • XHTML 文档必须拥有根元素
  • XML:可拓展标记语言

    • 主要用于存储数据和结构,可扩展。

标签§

DocType 标签的用途?§

  • DOCTYPE 是 Document Type 的缩写,是一种标准通用标记语言的文档类型声明。
  • 对 HTML 文件来说,浏览器使用文件开头的 DOCTYPE 来决定用怪异模式处理或是用标准模式处理;为了确保页面使用标准模式,需要引入 DocType。混杂模式服务于旧式规则,而严格模式服务于标准规则。
    • 标准模式: 行为即为由 HTML 与 CSS 的规范描述的行为。
    • 怪异模式: 排版会模拟 Navigator 4 与 IE5 的非标准行为
    • 接近标准模式:只有少数的怪异行为被实现。
    • 如果说只存在严格模式,那么许多旧网站必然受到影响,如果只存在混杂模式,那么会回到当时浏览器大战时的混乱,每个浏览器都有自己的解析模式。
  • 不同版本的声明方式:
    • HTML 4.01 基于 SGML(标准通用标记语言)。分为严格模式、过渡模式、框架模式。
    • HTML 5 不基于 SGML,不需要对 DTD 进行引用,只有一种声明方式。

Script 标签的用途?§

  • 通常情况下,<script> 标签最好放在 </body> 之前,这样可以保证 HTML 文档首先完成解析,将页面尽早呈现给用户。解决方案是使用 <script> 标签的 defer、async 属性,具体区别如下。
    • 没有 defer、async 时,HTML 解析中断,脚本被提取并立即执行。执行结束后,HTML 解析继续。
    • 只有 defer 时:立即下载,按照原来的标签顺序延迟执行
      • 脚本仅提取过程与 HTML 解析过程并行,脚本的执行将在 HTML 解析完毕后进行。
      • 如果含有多个 defer 脚本,脚本的执行顺序将按照在 document 中出现的位置,从上到下顺序执行。
    • 只有 async 时:异步下载完成后就执行,先下载完成的先执行。
      • 脚本的提取、执行的过程与 HTML 解析过程并行,脚本执行完毕可能在 HTML 解析完毕之前。
      • 当脚本与页面其它脚本相互独立时,可以使用 async,比如用作页面统计。
    • 注意:没有 src 属性的脚本,defer、async 属性将会被忽略。

Meta 标签的用途?§

  • meta 标签由 name 和 content 两个属性来定义,来描述一个 HTML 网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等,除了一些 HTTP 标准规定了一些 name 外,也可以自定义 name。
  • chaset:用于描述 HTML 文档的编码形式。
    • <meta charset="UTF-8">
  • http-equiv:相当于 HTTP 的头文件作用,如设置 HTTP 的缓存过期日期。
    • <meta http-equiv="expires" content="Wed, 20 Jun 2019 22:33:00 GMT">
  • viewport,移动端支持,可以控制视口的大小和比例。
    • <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  • apple-mobile-web-app-status-bar-style,PWA 相关。
    • <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  • 通常情况下,<link> 标签最好放在 <head></head> 中,这是规范要求的内容。这样做可以让页面逐步呈现,防止呈现给用户的是空白页面或没有样式的内容,提高了用户体验。
  • @import 与 link 的区别:
    • @import 用于从其他样式表导入样式规则,语法: @import url
    • 从属关系区别:link 属于 XHTML 标签,除了加载 CSS 外,还能用于定义 RSS,定义 rel 属性等作用;@import 是 CSS 提供的,用于引入外部文件。
    • 加载顺序区别:link 标签引入的 CSS 被同时加载,@import 引入的 CSS 将在页面加载完毕后被加载(更耗时)。
    • DOM可控性区别:当使用 JavaScript 控制 DOM 去改变样式的时候,只能使用 Link 标签,无法使用 @import 的方式插入样式。
  • link 标签可定义的常用属性:
    • rel:指明被链接文档与当前文档的关系(如stylesheet)
    • href:指定被链接资源的URL
    • type:定义链接内容的类型(text/css)
  • 属性 href 与 src 的区别
    • href 用来建立当前元素和文档之间的链接,它的内容与该页面有关联,表示引用。用在 link; a 等元素上。
    • src 会将其指向的资源下载并应用到文档中;它指向的内容是页面必不可少的一部分,表示引入。用在 img,script,iframe 等元素上。

Canvas 标签的用途?§

  • canvas 可以通过使用 JavaScript 中的脚本来绘制 2/3D 图形,制作照片、创建动画等。
  • 如何使用 <canvas> 绘图:
    • 大多数 Canvas 绘图 API 都没有定义在<canvas> 元素本身上,而是定义在通过画布的 getContext() 方法获得的一个“绘图环境”对象上。
    • Canvas API 也使用了路径的表示法。路径由一系列的方法调用来定义,比如调用 beginPath() 和 arc() 方法。一旦定义了路径,其他的方法,如 fill(),都是对此路径操作。
  • 和 SVG 以及 VML 之间的差异
    • <canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。
    • SVG 绘图很容易编辑,只要从其描述中移除元素就行。而要从同一图形的一个 <canvas> 标记中移除元素,需要擦掉绘图重绘。

属性§

data- 属性是什么?§

在 JavaScript 框架流行前,常用 data- 属性把额外数据存储在 DOM 自身中。现在鼓励将数据模型存放在 JavaScript 本身中,并利用框架提供的数据绑定,使之与 DOM 保持更新。

进阶§

如何理解 HTML 的可访问性?§

  • Metadata: 例如通过使用 Schema.org,RDF 和 JSON-LD。
  • WAI-ARIA:如何增加网页可访问性的 W3C 技术规范。 即使 WAI-ARIA 是理想的解决方案,我也会采用绝对定位方法,因为它具有最少的注意事项,适用于大多数元素,而且使用起来非常简单。

如何实现响应式图片?§

  • <img> 的 srcset 属性配合 sizes 属性。
    • serset 定义了我们允许浏览器选择的图像集,以及每个图像的大小。
    • sizes 定义了一组媒体条件(例如屏幕宽度)并且指明当某些媒体条件为真时,什么样的图片尺寸是最佳选择。
    • 浏览器遇到该属性后的处理过程:
      • 查看设备宽度
      • 检查 sizes 列表中哪个媒体条件是第一个为真
      • 查看给予该媒体查询的槽大小
      • 加载 srcset 列表中引用的最接近所选的槽大小的图像
  • <picture> 通过包含零或多个 <source> 元素和一个 <img> 元素来为不同的显示/设备场景提供图像版本。
    • 浏览器会选择最匹配的子 <source> 元素,如果没有匹配的,就选择 <img> 元素的 src 属性中的 URL。
<picture>
  <source srcset="/media/examples/surfer-240-200.jpg" media="(min-width: 800px)">
  <img src="/media/examples/painted-hand-298-332.jpg" />
</picture>

HTML5 新标签如何兼容老浏览器§

HTML 的渐进式渲染§

渐进式渲染是用于提高网页性能(尤其是提高用户感知的加载速度),以尽快呈现页面的技术。该技术在以前互联网宽带小时常常需要使用,现虽移动终端盛行,但移动网络不稳定,仍然有用武之地。举例如下:

  • 图片懒加载。页面上的图片不会一次性全部加载。当用户滚动页面到图片部分时,JavaScript 将加载并显示图像。
  • 确定显示内容的优先级(分层次渲染)。为了尽快将页面呈现给用户,页面只包含基本的最少量 CSS、脚本和内容,然后可以使用延迟加载脚本或监听 DOMContentLoaded/Load 事件加载其他资源和内容。
  • 异步加载分段 HTML。当页面通过后台渲染时,把 HTML 拆分,通过异步请求,分块发送给浏览器。

HTML 的 SEO 优化策略都有哪些?§

HTML 模板引擎是怎样工作的?§

HTML 网页搭配多语言§

客户端可在发送 HTTP 请求时,使用 Accept-Language 请求头,让服务器返回相匹配语言的 HTML 文档。返回的文档还应在 <html> 标签中声明 lang 属性。后台不同的语言,多以 YML 或 JSON 格式存储,并动态的生成指定的 HTML 页面,整个过程通常需要借助后台框架实现。

在开发多语言网站时,应注意如下事项:

  • 在 HTML 中使用 lang 属性。
  • 引导用户切换到自己的母语。
  • 在图片中展示文本会阻碍网站规模增长。
  • 限制词语或句子的长度。网页内容在使用其他语言时,文字长度会发生变化,设计时应多加考虑。
  • 注意颜色的使用。不同语言和文化中,颜色的意义、感受是不同的。
  • 日期和货币的格式化。
  • 不要使用连接的翻译字符串。如不使用 I will travel on {% date %}
  • 注意语言阅读方向。如英语从左向右,传统日语从右向左。