您好,登录后才能下订单哦!
HTML5 引入了许多新特性,主要包括:
- 语义化标签:如 <header>、<footer>、<article>、<section> 等。
- 表单增强:新增了 <input> 类型如 email、date、range 等。
- 多媒体支持:<audio> 和 <video> 标签。
- Canvas 和 SVG:用于绘制图形和动画。
- 本地存储:localStorage 和 sessionStorage。
- Web Workers:允许在后台运行 JavaScript 代码。
- WebSocket:实现全双工通信。
- Geolocation API:获取用户地理位置。
语义化标签是指使用具有明确含义的 HTML 标签来描述页面的结构和内容。例如,使用 <header> 表示页面的头部,使用 <footer> 表示页面的底部。
优点: - 提高可读性:代码更易于理解和维护。 - SEO 优化:搜索引擎更容易理解页面内容,提高搜索排名。 - 无障碍访问:屏幕阅读器等辅助工具可以更好地解析页面内容。
DOCTYPE 是文档类型声明,用于告诉浏览器当前文档使用的是哪种 HTML 或 XHTML 规范。它位于 HTML 文档的最顶部。
作用: - 触发标准模式:确保浏览器以标准模式渲染页面,避免兼容性问题。 - 验证文档类型:帮助验证工具检查文档是否符合指定的 HTML 或 XHTML 规范。
data-* 属性是什么?data-* 属性是 HTML5 引入的自定义数据属性,允许开发者在 HTML 元素中存储自定义数据。这些属性可以通过 JavaScript 访问和操作。
示例:
<div id="user" data-user-id="123" data-role="admin"></div>
const user = document.getElementById('user');
console.log(user.dataset.userId); // 输出 "123"
console.log(user.dataset.role); // 输出 "admin"
meta 标签有哪些常见用途?meta 标签用于提供页面的元数据,常见的用途包括:
- 字符编码:<meta charset="UTF-8">
- 页面描述:<meta name="description" content="页面描述">
- 关键词:<meta name="keywords" content="关键词1, 关键词2">
- 视口设置:<meta name="viewport" content="width=device-width, initial-scale=1.0">
- 作者信息:<meta name="author" content="作者名">
- 刷新页面:<meta http-equiv="refresh" content="5;url=http://example.com">
script 标签的 async 和 defer 属性有什么区别?async:脚本异步加载,加载完成后立即执行,不保证执行顺序。defer:脚本异步加载,但在文档解析完成后按顺序执行。区别:
- async 适用于不依赖其他脚本的独立脚本。
- defer 适用于需要按顺序执行的脚本。
iframe 标签有什么作用?iframe 标签用于在当前页面中嵌入另一个网页。常见的用途包括:
- 嵌入第三方内容:如地图、视频等。
- 实现跨域通信:通过 postMessage API。
- 创建沙盒环境:通过 sandbox 属性限制嵌入页面的行为。
canvas 和 SVG 有什么区别?canvas:基于像素的绘图 API,适合处理复杂的图形和动画,但无法直接操作 DOM。SVG:基于矢量的图形格式,适合处理简单的图形和图标,可以直接操作 DOM。区别:
- canvas 适合处理大量动态图形,性能较高。
- SVG 适合处理静态图形,支持缩放和交互。
Web Components 是什么?Web Components 是一组允许开发者创建可重用的自定义 HTML 元素的技术,主要包括:
- Custom Elements:允许定义新的 HTML 元素。
- Shadow DOM:提供封装样式和结构的机制。
- HTML Templates:允许定义可复用的 HTML 模板。
优点: - 组件化:提高代码的可重用性和可维护性。 - 封装性:避免样式和脚本的全局污染。
ARIA 是什么?ARIA(Accessible Rich Internet Applications)是一组用于增强网页可访问性的属性,主要用于辅助技术(如屏幕阅读器)理解网页内容。
常见属性:
- role:定义元素的角色,如 button、menu 等。
- aria-label:为元素提供可访问的标签。
- aria-hidden:隐藏元素,使其对辅助技术不可见。
CSS 盒模型描述了元素在页面中的布局方式,主要包括: - 内容区:元素的实际内容。 - 内边距:内容区与边框之间的空间。 - 边框:围绕内容和内边距的边界。 - 外边距:元素与其他元素之间的空间。
盒模型类型:
- 标准盒模型:width 和 height 只包括内容区。
- IE 盒模型:width 和 height 包括内容区、内边距和边框。
position 属性有哪些值?position 属性用于指定元素的定位方式,常见的值包括:
- static:默认值,元素按照正常文档流排列。
- relative:相对定位,元素相对于其正常位置进行偏移。
- absolute:绝对定位,元素相对于最近的定位祖先元素进行偏移。
- fixed:固定定位,元素相对于视口进行偏移。
- sticky:粘性定位,元素在滚动到特定位置时固定。
flexbox 是什么?flexbox 是一种一维布局模型,用于在容器内灵活地排列子元素。主要属性包括:
- display: flex:将容器设置为 flex 容器。
- flex-direction:指定主轴方向(row、column 等)。
- justify-content:指定主轴上的对齐方式。
- align-items:指定交叉轴上的对齐方式。
- flex-grow:指定子元素的放大比例。
- flex-shrink:指定子元素的缩小比例。
- flex-basis:指定子元素的初始大小。
grid 是什么?grid 是一种二维布局模型,用于在容器内创建复杂的网格布局。主要属性包括:
- display: grid:将容器设置为 grid 容器。
- grid-template-columns:定义列的大小和数量。
- grid-template-rows:定义行的大小和数量。
- grid-gap:定义网格之间的间距。
- grid-column 和 grid-row:指定子元素在网格中的位置。
BEM 命名规范是什么?BEM(Block, Element, Modifier)是一种 CSS 命名规范,用于提高代码的可读性和可维护性。
命名规则:
- Block:独立的组件,如 .header。
- Element:块的一部分,如 .header__logo。
- Modifier:块或元素的状态,如 .header--fixed。
优点: - 模块化:提高代码的可重用性。 - 清晰性:明确元素之间的关系和状态。
伪类 和 伪元素 有什么区别?:hover、:focus 等。::before、::after 等。区别: - 伪类选择的是元素的特定状态。 - 伪元素创建的是虚拟元素。
z-index 是什么?z-index 属性用于控制元素的堆叠顺序,值越大,元素越靠前。
注意:
- z-index 只对定位元素(position 值为 relative、absolute、fixed 或 sticky)有效。
- 如果两个元素的 z-index 相同,则后出现的元素会覆盖前面的元素。
媒体查询 是什么?媒体查询 用于根据设备的特性(如屏幕宽度、分辨率等)应用不同的样式。
示例:
@media screen and (max-width: 768px) {
body {
background-color: lightblue;
}
}
常见用途: - 响应式设计:根据屏幕大小调整布局。 - 打印样式:为打印设备提供特定的样式。
动画 和 过渡 有什么区别?@keyframes 定义复杂的动画效果,可以控制多个关键帧。transition 定义简单的状态变化效果,只能控制开始和结束状态。区别: - 动画适合复杂的、多阶段的效果。 - 过渡适合简单的、单阶段的效果。
预处理器 是什么?CSS 预处理器是一种脚本语言,扩展了 CSS 的功能,常见的预处理器包括 Sass、Less 和 Stylus。
优点: - 变量:定义可重用的值。 - 嵌套:简化选择器的书写。 - 混合:定义可重用的样式块。 - 函数:实现复杂的计算和逻辑。
闭包 是什么?闭包是指函数能够访问其词法作用域中的变量,即使函数在其词法作用域之外执行。
示例:
function outer() {
let count = 0;
return function inner() {
count++;
return count;
};
}
const counter = outer();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
优点: - 数据封装:保护变量不被外部访问。 - 函数工厂:创建具有特定行为的函数。
原型链 是什么?原型链是 JavaScript 实现继承的机制,每个对象都有一个原型对象,通过 __proto__ 属性指向其原型对象,直到 null。
示例:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(`Hello, ${this.name}`);
};
const person = new Person('Alice');
person.sayHello(); // 输出 "Hello, Alice"
优点: - 共享方法:减少内存占用。 - 动态继承:可以在运行时修改原型链。
this 是什么?this 是函数执行时的上下文对象,其值取决于函数的调用方式。
常见情况:
- 全局上下文:this 指向 window(浏览器)或 global(Node.js)。
- 对象方法:this 指向调用该方法的对象。
- 构造函数:this 指向新创建的对象。
- 箭头函数:this 继承自外层函数的 this。
Promise 是什么?Promise 是一种用于处理异步操作的对象,表示一个可能在未来完成或失败的操作。
示例:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Success');
}, 1000);
});
promise.then((result) => {
console.log(result); // 输出 "Success"
}).catch((error) => {
console.error(error);
});
优点:
- 链式调用:简化异步操作的处理。
- 错误处理:通过 catch 方法统一处理错误。
async/await 是什么?async/await 是 Promise 的语法糖,用于简化异步代码的书写。
示例:
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
fetchData();
优点:
- 同步风格:使异步代码看起来像同步代码。
- 错误处理:通过 try/catch 处理错误。
事件循环 是什么?事件循环是 JavaScript 处理异步操作的机制,主要包括:
- 调用栈:用于存储同步任务的执行上下文。
- 任务队列:用于存储异步任务的回调函数。
- 微任务队列:用于存储 Promise 的回调函数。
执行顺序: 1. 执行同步任务。 2. 执行微任务队列中的所有任务。 3. 执行任务队列中的一个任务。 4. 重复上述步骤。
模块化 是什么?模块化是将代码分割成独立的模块,每个模块具有特定的功能,通过 import 和 export 进行依赖管理。
常见模块化方案:
- CommonJS:Node.js 使用的模块化方案,使用 require 和 module.exports。
- ES Modules:ES6 引入的模块化方案,使用 import 和 export。
优点: - 代码复用:提高代码的可重用性。 - 依赖管理:明确模块之间的依赖关系。
垃圾回收 是什么?垃圾回收是 JavaScript 自动管理内存的机制,主要包括: - 标记清除:标记不再使用的对象并清除。 - 引用计数:记录对象的引用次数,当引用次数为 0 时清除。
优点: - 自动管理:减少内存泄漏的风险。 - 提高效率:开发者无需手动管理内存。
深拷贝 和 浅拷贝 有什么区别?示例:
const obj = { a: 1, b: { c: 2 } };
// 浅拷贝
const shallowCopy = { ...obj };
shallowCopy.b.c = 3;
console.log(obj.b.c); // 输出 3
// 深拷贝
const deepCopy = JSON.parse(JSON.stringify(obj));
deepCopy.b.c = 4;
console.log(obj.b.c); // 输出 3
区别: - 浅拷贝只复制一层,深拷贝复制所有层。
防抖 和 节流 有什么区别?示例:
// 防抖
function debounce(fn, delay) {
let timer;
return function() {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, arguments), delay);
};
}
// 节流
function throttle(fn, delay) {
let lastTime = 0;
return function() {
const now = Date.now();
if (now - lastTime >= delay) {
fn.apply(this, arguments);
lastTime = now;
}
};
}
区别: - 防抖适合处理频繁触发的事件,如输入框输入。 - 节流适合处理连续触发的事件,如滚动事件。
虚拟 DOM 是什么?虚拟 DOM 是 React 用于提高性能的一种机制,通过将真实的 DOM 抽象为 JavaScript 对象,减少直接操作 DOM 的次数。
优点: - 提高性能:减少 DOM 操作的次数。 - 跨平台:可以在不同的平台上使用相同的虚拟 DOM。
组件生命周期 有哪些?React 组件的生命周期主要包括以下几个阶段:
- 挂载阶段:componentDidMount
- 更新阶段:componentDidUpdate
- 卸载阶段:componentWillUnmount
注意:React 16.3 引入了新的生命周期方法,如 getDerivedStateFromProps 和 getSnapshotBeforeUpdate。
Hooks 是什么?Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和生命周期方法。
常见 Hooks:
- useState:用于管理状态。
- useEffect:用于处理副作用。
- useContext:用于访问上下文。
- useReducer:用于管理复杂状态。
优点: - 简化代码:减少类组件的使用。 - 提高可读性:使代码更易于理解和维护。
响应式原理 是什么?Vue 的响应式原理是通过 Object.defineProperty 或 Proxy 监听对象属性的变化,并在变化时更新视图。
优点: - 自动更新:减少手动操作 DOM 的次数。 - 提高性能:通过虚拟 DOM 减少不必要的更新
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。