您的位置:首页 > 新闻 > 热点要闻 > 义乌网络科技有限公司_湖南响应式网站建设哪家有_app推广拉新_自己建立网站步骤

义乌网络科技有限公司_湖南响应式网站建设哪家有_app推广拉新_自己建立网站步骤

2025/2/27 21:59:36 来源:https://blog.csdn.net/qq_43547255/article/details/145459327  浏览:    关键词:义乌网络科技有限公司_湖南响应式网站建设哪家有_app推广拉新_自己建立网站步骤
义乌网络科技有限公司_湖南响应式网站建设哪家有_app推广拉新_自己建立网站步骤
1.vue生命周期

beforeCreate 创建 注入依赖 初始化非响应式数据 beforeCreate created 数据请求,初始化数据
设置全局时间监听 beforeMount挂载 模版编译完成后的调试 操作 dom初始化 操作dom初始化第三方插件 更新 在更新前查看
DOM 状态,不建议修改数据 操作更新后的 DOM,检查更新后的效果 销毁 清理定时器、事件监听、断开 WebSocket
检查销毁状态,调试用途

2.resizeObserver

resizeObserver ResizeObserver 是一个 JavaScript
API,允许你观察一个元素的尺寸变化。当被观察的元素的尺寸(宽度或高度)发生变化时,ResizeObserver 会触发相应的回调函数。这个
API 可以用于响应页面元素的尺寸变化,类似于监听 resize
事件,但它更加精确地关注元素本身的尺寸变化,而不是整个视口或窗口的大小变化。 主要特点:
精确的尺寸变化监听:它可以监控特定元素的大小变化,而不仅仅是浏览器窗口的大小。
回调触发时机:当被观察的元素的尺寸变化时,ResizeObserver 会异步地调用回调函数。这个回调会提供相关的尺寸信息。
避免重复监听:通过 ResizeObserver,你可以精确地检测某个元素的尺寸变化,而不需要频繁地使用像 window.resize
这样的全局事件监听器来监听所有元素。

参数: entries:ResizeObserver 的回调函数接收一个 entries 数组,其中包含所有被观察元素的尺寸变化数据。每个
entry 包含以下信息: target: 发生变化的元素。 contentRect: 该元素的新尺寸,通常包含
width、height、top、left 等属性。 你还可以访问一些其他信息,例如 borderBoxSize 和
contentBoxSize,具体取决于浏览器的实现。 何时使用 ResizeObserver?
动态布局:当页面中某个元素的大小会根据内容或用户交互动态变化时,可以使用 ResizeObserver
来做相应的处理(如重绘、重新布局等)。 响应式设计:监控某些元素的尺寸变化,可以根据元素大小调整页面布局,类似于响应式设计中的布局调整。
元素大小变化的动画或效果:当需要根据元素大小的变化来控制动画或其他动态效果时,ResizeObserver 是一个非常合适的工具。

// 创建 ResizeObserver 实例
const resizeObserver = new ResizeObserver(entries => {// 处理尺寸变化的逻辑entries.forEach(entry => {console.log('Element:', entry.target); // 被观察的元素console.log('Content Rect:', entry.contentRect); // 元素的新尺寸});
});// 观察一个元素
const element = document.querySelector('.my-element');
resizeObserver.observe(element);// 停止观察
// resizeObserver.unobserve(element);
// 创建 ResizeObserver 实例
const resizeObserver = new ResizeObserver(entries => {// 处理尺寸变化的逻辑entries.forEach(entry => {console.log('Element:', entry.target); // 被观察的元素console.log('Content Rect:', entry.contentRect); // 元素的新尺寸});
});// 观察一个元素
const element = document.querySelector('.my-element');
resizeObserver.observe(element);// 停止观察
// resizeObserver.unobserve(element);

参数:
entries:ResizeObserver 的回调函数接收一个 entries 数组,其中包含所有被观察元素的尺寸变化数据。每个 entry 包含以下信息:
target: 发生变化的元素。
contentRect: 该元素的新尺寸,通常包含 width、height、top、left 等属性。
你还可以访问一些其他信息,例如 borderBoxSize 和 contentBoxSize,具体取决于浏览器的实现。
何时使用 ResizeObserver?
动态布局:当页面中某个元素的大小会根据内容或用户交互动态变化时,可以使用 ResizeObserver 来做相应的处理(如重绘、重新布局等)。
响应式设计:监控某些元素的尺寸变化,可以根据元素大小调整页面布局,类似于响应式设计中的布局调整。
元素大小变化的动画或效果:当需要根据元素大小的变化来控制动画或其他动态效果时,ResizeObserver 是一个非常合适的工具。加粗样式

const debounce = (callback: (...args: any[]) => void, delay: number) => {let tid: any;return function (...args: any[]) {const ctx = self;tid && clearTimeout(tid);tid = setTimeout(() => {callback.apply(ctx, args);}, delay);};
};const _ = (window as any).ResizeObserver;
(window as any).ResizeObserver = class ResizeObserver extends _ {constructor(callback: (...args: any[]) => void) {callback = debounce(callback, 20);super(callback);}
};

// 监听某个元素的尺寸变化并更新其背景颜色

const resizeObserver = new ResizeObserver(entries => {entries.forEach(entry => {const width = entry.contentRect.width;if (width < 500) {entry.target.style.backgroundColor = 'lightblue';} else {entry.target.style.backgroundColor = 'lightgreen';}});
});const element = document.querySelector('.resize-element');
resizeObserver.observe(element);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ResizeObserver 和 resize 事件都是用来响应尺寸变化的,但它们的使用场景、触发时机、目标和性能表现有一些显著的区别。

  1. 目标对象不同
    resize 事件:resize 事件是监听 窗口(即浏览器视口)的大小变化。当浏览器窗口的大小发生变化时,resize 事件会被触发。它不关心页面上某个特定元素的大小变化,而是全局监听整个视口的尺寸变化。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    操作
   const arr = [1, 2, 3, 4]// const newFilterArray = [...new Set(arr)];// console.log("运用Set集合过滤元素",newFilterArray)// const newFilterArray = arr.filter((value,index,arr)=>{//   return arr.indexOf(value) === index;// })//reduce + includes: 使用 reduce 和 includes 进行去重/*array.reduce((accumulator, currentValue, currentIndex, array) => {// 回调函数体}, initialValue);accumulator:累加器,保存上一次调用回调函数时返回的值,第一次调用时是 initialValue(如果提供了)。currentValue:当前数组元素的值。currentIndex(可选):当前元素的索引。array(可选):原始数组。initialValue(可选):累加器的初始值。如果未提供,reduce() 会以数组的第一个元素作为初始值。const arr = [1, 2, 3, 4, 5];const sum = arr.reduce((accumulator, currentValue) => {return accumulator + currentValue;}, 0);  // 初始值为 0const sum = srr.reduce((nextSum,currentSum)=>{return nextSum + currentSum; },0)console.log(sum);  // 输出 15示例:求最大值const arr = [1, 9, 4, 6, 2];const max = arr.reduce((accumulator, currentValue) => {return accumulator > currentValue ? accumulator : currentValue;}, arr[0]);  // 初始值为数组的第一个元素解释:accumulator 存储当前找到的最大值。每次遍历数组时,比较当前元素 currentValue 和 accumulator,并返回较大的值console.log(max);  // 输出 9const arr = [1, 2, 2, 3, 4, 4, 5];const uniqueArr = arr.reduce((accumulator, currentValue) => {if (!accumulator.includes(currentValue)) {accumulator.push(currentValue);}return accumulator;}, []);console.log(uniqueArr);  // 输出 [1, 2, 3, 4, 5]考察点:如何高效地去重,考虑时间复杂度。对于较大的数据集,你如何选择适当的数据结构(比如 Set、Map)来提高效率。处理对象去重时如何确保每个对象唯一。*/// console.log("运用Set集合过滤元素",newFilterArray)const arrw = [{ id: 1, name: 'John' },{ id: 2, name: 'Jane' },{ id: 1, name: 'John' },]// const newFilterArray = Array.from(new Map(arrw.map(item=>[item.id,item])).values())// const uniqueArr = Array.from(new Map(arrw.map(item => [item.id, item])).values());// console.log(uniqueArr);  // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]/*数组反转 arr.reverse()字符串反转字符串本身是不可变的通常将字符串转为数组反转 拼接成字符串const str = 'hello'const reversedStr = ste.split('').reverse().join('')console.log(reverseStr)深拷贝(深复制)深拷贝和钱拷贝是数据处理中常见的考点 面试中经常会问如何进行正确的使用深拷贝操作 尤其是处理对象和数组确保不出现引用问题常见方法JSON方法 使用JSON.parse()和JSON.stringify()进行深拷贝const obj = {a:1,b:{c:2}}const cloneObj = JSON.parse(JSON.stringify(obj))递归方法: 通过递归遍历对象的每一层并手动进行深拷贝:const arr = [3, 1, 4, 1, 5, 9];arr.sort((a, b) => a - b);  // 数字升序console.log(arr);  // [1, 1, 3, 4, 5, 9]const arr = [3, 1, 2, 2, 4, 3];const result = [...new Set(arr)].sort((a, b) => a - b);console.log(result);  // [1, 2, 3, 4]
3.vue2和vue3生命周期钩子的区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.W3C 标准

W3C 标准 概念:由万维网联盟(W3C)制定的 Web 开发标准,确保 HTML、CSS 和其他 Web 技术的兼容性和一致性。 重要性:遵循 W3C 标准可提升网页的可维护性、语义化和搜索引擎优化。 核心点: 使用语义化标签(如
<article>、<section>、<footer>)。 保证 HTML 的结构清晰,避免语法错误。 确保 CSS
样式符合标准(如避免过时的属性)。

为什么要遵循

(1)、因为不管什么浏览器都是遵循HTML的标准来开发的,如果你的网页的HTML不遵循规范,就无法在浏览器中得到正确的呈现
(2)、遵循html标准能够能过让过大浏览器更好的解析;提高可阅读性;

用一个程序语言来说,我们是转换器,我们想方设法让我们的页面、我们的程序能够支持所有浏览器,能够满足尽可能多的用户。我们要满足所有的用户,即使做不到,我们也要满足我们技术范围之内的所有用户。

5.HTML5 和 CSS3比较

HTML5 新特性: 语义化标签:<header>、<footer>、<nav> 等。 多媒体:<audio>、<video>
标签支持本地音视频播放。 表单增强: 的新类型(如 date、email)。 本地存储:localStorage 和
sessionStorage 提供持久数据存储能力。

CSS3

新特性: 选择器:nth-child、not 等高级选择器。 动画:@keyframes 实现复杂动画效果。
过渡与变换:transition、transform 创建交互效果。 响应式设计:@media 媒体查询支持多设备适配。
新布局:flexbox 和 grid 布局提升页面布局效率。

6.盒模型

标准盒模型与怪异盒模型的区别。 标准盒模型:width 和 height 只包括内容区域,不包括 padding 和 border。
怪异盒模型:width 和 height 包括 content + padding + border。

7.什么情况下会使用 border-box?
  1. 固定布局: 当需要确保元素的宽度和高度保持固定,不因 padding 和 border 改变。 适用于复杂的网格或卡片布局。

/* 标准盒模型 */
box-sizing: content-box;

/* 怪异盒模型 */
box-sizing: border-box;
· content-box: 用于需要精确控制内容区域的场景,但要手动计算额外的尺寸。
· border-box: 更适合现代布局需求,简化宽高的计算,同时确保元素大小固定,推荐作为默认

8.Flexbox 布局:

主轴与交叉轴概念。 常用属性:justify-content、align-items、flex-grow。 示例问题:如何实现水平垂直居中
Grid 布局:

定义网格:grid-template-rows、grid-template-columns。 常见用法:实现复杂的二维布局

9.CSS 预处理器的优势

CSS 预处理器(如 Sass、Less、Stylus)扩展了 CSS 的功能,主要有以下优势:
变量(Variables):

使用变量存储颜色、字体、间距等可复用值,方便维护和更新。

$primary-color: #3498db;.button {background-color: $primary-color;
}

嵌套规则(Nesting):

通过嵌套编写样式,更贴近 HTML 结构,简化层级关系。

.nav {ul {li {a {color: blue;}}}
}

混入(Mixins):

定义可复用的代码块,减少冗余。

@mixin border-radius($radius) {border-radius: $radius;
}.box {@include border-radius(10px);
}

继承(Extend):

可以继承已有的样式,减少重复代码。

%button-styles {padding: 10px;border: none;
}.primary-button {@extend %button-styles;background-color: blue;
}

模块化:

支持将代码分解为多个文件,便于管理。

// 文件 _variables.scss$primary-color: #3498db;
// 文件 main.scss@import 'variables';.button {color: $primary-color;
}

数学运算:

支持基本的数学计算,用于动态调整样式。


$base-spacing: 10px;.container {margin: $base-spacing * 2;
}

条件与循环:

支持条件语句和循环,生成更复杂的样式。

@for $i from 1 through 3 {.col-#{$i} {width: 100% / $i;}
}
10.如何避免过度使用全局样式?

使用命名空间或前缀:

为类名添加特定的命名空间或前缀,避免与全局样式冲突。

定位布局:
相对定位:position: relative;
绝对定位:position: absolute;
固定定位:position: fixed;
粘性定位:position: sticky;

11.CSS 优化

减少重复样式,使用 Sass、Less 变量或混合。 样式的层叠与优先级: 行内样式 > ID 选择器 > 类选择器 > 元素选择器。 使用 !important 的规则会强制优先级最高,但应谨慎使用。

12.层叠上下文(Z-index)

如何解决 z-index 失效的问题 解决 z-index 失效的问题 z-index 的作用是控制元素在 z
轴上的堆叠顺序,但如果使用不当,会导致它看似“失效”。以下是常见原因和解决方法:

  1. z-index 必须作用在定位上下文中 问题: 如果元素没有设置 position 或者 position 的值为 static(默认值),z-index 将不会生效。 解决方法: 确保目标元素具有定位上下文,使用 position:
    relative;、absolute;、fixed; 或 sticky;。
13.浏览器兼容性

常见问题: IE 不支持 flex 部分功能。 不同浏览器的私有前缀(如 -webkit-)。 解决方法: 使用 Autoprefixer
自动添加兼容前缀。 借助 CSS Polyfill 处理新特性的兼容性。 触发层叠上下文的条件: 设置 position 为
relative、absolute 或 fixed 且定义 z-index。 使用 transform、filter、opacity
等属性。

14.TypeScript (TS) 和 ES6

TypeScript 核心点: 类型系统:string、number、interface、enum。
面向对象编程:class、inheritance、decorators。 工具类型:Partial、Readonly、Pick 等内置工具。
优势: 提高代码可读性和可维护性。 在大型项目中减少运行时错误。 ES6 新特性: 块级作用域:let、const。
箭头函数:简化函数表达式。 模块化:import 和 export。 异步编程:Promise 和 async/await。
解构赋值与展开运算符:简化数组和对象的操作。 模板字符串:通过 `` 提供字符串插值。

15.Sass 预处理器

功能:

嵌套规则:清晰地表达层次关系。 变量:定义可复用的颜色、间距等。 混合(Mixin):封装可复用的样式代码。 函数:动态生成复杂样式。
优势: 提高开发效率,减少代码冗余。 保持样式的模块化和结构化。

16.数据请求(Ajax 和 Axios)

Ajax
概念:使用原生 JavaScript 发起 HTTP 请求。

const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data');
xhr.onload = () => {console.log(xhr.responseText);
};
xhr.send();

Axios
概念:基于 Promise 的 HTTP 库,简化了数据请求。
示例:

axios.get('/api/data').then(response => {console.log(response.data);
});
17. UI 框架(Element-UI、Ant Design、UView)

Element-UI:

提供 Vue 的组件库,适合管理后台开发。 组件示例:表单、表格、分页等。

Ant Design:

提供 React 的组件库,也有 Vue 版本。
强调设计语言和可扩展性。

UView:

专为 UniApp 开发的 UI 框架。 提供适配多端的组件,如 u-button、u-calendar。

Vue 和 UniApp
Vue

核心特性: 双向绑定:v-model。 组件化开发:将页面分解为独立组件。 响应式数据:通过 reactive 和 computed
管理状态。 Vue Router:管理页面路由。 Vuex:全局状态管理。

UniApp
特点:

跨平台:一次开发,生成多端(小程序、H5、App)。 内置 API:如 uni.request、uni.navigateTo。
Webpack 功能: 模块打包:整合 JavaScript、CSS、图片等资源。 提供插件系统:如 HtmlWebpackPlugin。
支持代码分割和按需加载。

module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',},module: {rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader'] },],},
};
18. Vue生命周期

问:Vue 的生命周期有哪些阶段?每个阶段的用途是什么? o常见生命周期钩子:
1.beforeCreate:实例初始化之前,无法访问 data 和 methods。
2.created:实例创建完成,可以访问 data 和 methods,未挂载 DOM。
3.beforeMount:模板已编译,但尚未挂载到 DOM。
4.mounted:组件挂载完成,可进行 DOM 操作。
5.beforeUpdate:响应式数据更新前触发。
6.updated:响应式数据更新后触发。
7.beforeDestroy:组件销毁前触发,适合清理定时器、事件监听等。
8.destroyed:组件销毁后触发。

19. 双向绑定

Vue 通过 Object.defineProperty 实现数据劫持,结合 发布-订阅模式 来响应视图和数据的变化。
Vue 3 使用 Proxy 代替 Object.defineProperty 提升性能和深度监听能力。

20. const var的区别?

(const定义的变量不可以修改,而且必须初始化。.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。let是块级作用域,函数内部使用let定义后,对函数外部无影响。)

11. 箭头函数的使用?追问this的指向问题,有哪几种?(作为普通函数调用 – 返回window;使用call apply bind被调用 – 传入什么绑定什么;作为对象方法被调用 – 返回对象本身;在class方法中被调用 – 返回当前实例本身;箭头函数 – 永远会找上级作用域this的值来确定)

12. 追问call apply bind的区别?(call 和 apply 都是为了解决改变 this 的指向。call 可以接收一个参数列表,apply 只接受一个参数数组;bind 方法会返回一个函数。bind固定某个函数的参数和this,返回原函数的拷贝)

13.追问闭包是什莫?(函数 A 内部有一个函数 B,函数 B 可以访问到函数 A 中的变量,那么函数 B 就是闭包。闭包存在的意义就是让我们可以间接访问函数内部的变量。)再追问JS作用域有哪些?(三级作用域:全局作用域(全局都可以使用,如document对象)函数作用域(一个函数中定义的只能在当前函数使用)块级作用域(ES新增)(块:包含if while等包含大括号,在大括号外使用会报错)

14.v-if和v-show有什莫区别,分别适用于什么情况?(渲染结果不同,对于v-if只会渲染一个dom元素;对于v-show,data是a就会显示a的dom元素,对于其他的选择会渲染display:none,只是不显示而已。对于一次选择或者数据更新不频繁时,选择v-if;如果需要频繁切换,需要v-show,用display:none控制隐藏和显示效果比较好,否则用v-if会导致dom结点频繁的销毁加载。)

15.兄弟组件通讯的方法有哪些?(我只说了使用事件中心,这个知识点还要总结)

21. Keep-alive 是什么

Keep-alive是vue中的为你之组件 ,能在组件切换中将庄涛保留在内存中 防止重复渲染dom
Keep-alive包裹性动态组件时 会缓存不活动的实例对象 而不是销毁他们
Keep-alive可以设置以下属性 props属性
Include-字符串或正则表达式 只有名称匹配的组件
Exclude 任何符合条件的都不会缓存
Max 最多可以缓存多少组件实例
关于keep-alive的基本用法

/keep-alive>

22. Vue 组件不需要任何 polyfill polyfill是啥意思啊

在 JavaScript 和前端开发中,polyfill 是指一种代码或库,用来为那些不支持某些现代功能的浏览器提供兼容性支持。
当新的 JavaScript 特性或浏览器 API 被引入时,较旧的浏览器可能不支持这些特性。Polyfill 会检测到浏览器是否支持这些功能,如果不支持,就会加载一些额外的代码来模拟这些功能的行为,从而确保代码能够在所有浏览器中正常运行。
例如,Promise 是在 ES6 中引入的一个特性,而较旧的浏览器不支持它。这时我们可以引入一个 polyfill 来让旧版浏览器理解 Promise 的语法和功能。
在你的问题中,“Vue 组件不需要任何 polyfill” 意思是:这些组件不需要使用 polyfill 来兼容不同浏览器,因为它们已经可以在当前环境下正常工作,或者你只打算支持那些已经原生支持相关特性的现代浏览器。
在 Vue 中,property 指的是对象中的属性,而不是特指原型链上的属性。你提到的 “实例 property” 是 Vue 实例自身的属性,它们有 $ 前缀来避免与用户定义的属性冲突。
在 Vue 中,实例的 property 和 methods 是 Vue 实例直接暴露给用户的接口,供开发者调用。例如, e l 、 el、 elrefs、 w a t c h 、 watch、 watchnextTick 等,这些属性和方法并非来自用户定义的 data,而是 Vue 框架提供的功能。

.mapCarPop
原型链和 Vue 实例的关系
虽然 Vue 实例上的这些 $ 开头的 property 和方法是 Vue 提供的功能,但它们实际上也是通过 Vue 的原型链机制实现的。在 JavaScript 中,所有对象都有一个原型对象(prototype),Vue 也不例外。当你访问一个 Vue 实例的属性或方法时,JavaScript 会首先检查实例本身是否有这个属性或方法,如果没有,便会沿着原型链向上查找,直到找到为止。
总结:
property 是指对象(在这里是 Vue 实例)上的属性,而不仅限于原型链上的属性。
Vue 中的 $ 前缀属性和方法是 Vue 框架提供的,便于与用户定义的数据区分。
Vue 实例上的某些方法和属性可能通过原型链提供,但这些方法是 Vue 内部提供的功能。

是的,property(属性)在 JavaScript 中是一个非常常见的概念。它是指对象的键-值对,每个对象都由一组属性构成。

JavaScript 中的 Property
在 JavaScript 中,几乎所有的东西都是对象,而对象是由属性(property)组成的。每个属性都有一个名字(键)和一个对应的值。

属性的类型:
数据属性:表示对象上的某个值。
const obj = {
name: ‘John’, // 这里的 ‘name’ 是属性名,‘John’ 是属性值
age: 30
};
console.log(obj.name); // 输出 ‘John’
访问器属性:不直接包含值,但通过 getter 和 setter 进行访问和修改。
Property 和 Prototype(原型链)
JavaScript 中对象的属性可以存在于自身,也可以从原型链(prototype chain)继承。原型链是 JavaScript 实现继承的一种机制。
自有属性:对象自身定义的属性。
继承属性:通过原型链从另一个对象继承来的属性。
javascript
复制代码
const obj = { a: 1 };console.log(obj.hasOwnProperty(‘a’)); // true
console.log(obj.toString()); // ‘toString’ 是从原型链继承的属性
在这个例子中,obj 具有自有属性 a,而 toString() 是从 Object.prototype 继承来的。
总结
在 JavaScript 中,property 是对象的核心组成部分,它代表了对象的键值对。对象的属性可以直接定义,也可以通过原型链继

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com