创建网页链接,天津网站优化公司哪家好,公司部门网站设计模板下载,建个人网站赚钱吗1、vue的双向绑定原理是什么#xff1f;里面的关键点在哪里#xff1f; 2、实现水平垂直居中的方式#xff1f; 3、常用伪元素有哪一些#xff1f; 4、移动端如何适配不同屏幕尺寸#xff1f; 5、本地存储有哪一些#xff1f;他们三者有什么区别#xff1f; 6、JS的数据… 1、vue的双向绑定原理是什么里面的关键点在哪里 2、实现水平垂直居中的方式 3、常用伪元素有哪一些 4、移动端如何适配不同屏幕尺寸 5、本地存储有哪一些他们三者有什么区别 6、JS的数据类型如何判断js的数据类型? 7、说一下ES6的新特性有哪些 8、Let、const、var三者有什么区别 9、数组去重有哪些办法 ES6新增构造函数set利用set具有天然去重功能 数组迭代 10、说一下深拷贝和浅拷贝如何自己实现一个深拷贝 11、Vue的生命周期有哪一些说一下它们每个阶段做什么操作 12、组件通讯方式有哪一些 13、Vuex有几个属性及作用 14、Vue的监听属性和计算属性有什么区别 15、说一下防抖和节流。怎么实现 16、Vue的导航守卫有哪一些 17、你的登录拦截怎么实现的 18、有用过图表吗用的多吗 19、闭包是什么如何实现 20、Vue2.0和vue3.0有什么区别 21、Vue常用的指令有哪些 22、v-If和v-show有什么区别 23、v-for为什么要加一个key 24、你是如何封装一个组件的 25、有自己从0到1搭建过项目吗 26、有用过uni-app吗 27、你会写后台吗有搞过服务端渲染吗 28、说一下你项目中遇到的难点如何解决 29、Url到浏览器的一个过程有哪些步骤 30、如何实现小程序的request封装及拦截 31、在vue的项目应用中不使用框架怎么封装 32、什么是Js原型原型链是什么 33、组件通讯方式有哪些 34、用闭包的原理做过哪些 35、作用域是什么 36、操作数组的方式有哪些 37、0.1 0.2 等于 0.3吗为什么如何解决 38、keep-alive是什么有哪几个生命周期阶段 39、判断一个变量是否是数组有哪些办法 40、判断一个变量是否是对象有哪些办法 41、对象/数组常用方法有哪些 42、创建一个空数组/空对象有哪些方式 43、哪些遍历方式会改变原数组 44、Set和Map各是什么 45、介绍一下promise。 46、Promise通常会解决三种问题 (1)链式回调 (2)同时发起几个异步请求谁先有结果就拿谁的 (3)发起多个请求等到所有请求后再做下一步处理 这三种方式promise是怎么处理的 47、如何改变一个函数a的上下文 48、Call和replay有什么区别 49、Evenbus是什么东西 50、Vue中普通的生命周期大概有哪些 51、父子组件生命周期执行顺序是怎么样的 52、mixins有几个生命周期阶段 53、弹性布局一行两列一列固定宽如何实现 54、Flex1 包含哪三种属性 1、vue的双向绑定原理是什么里面的关键点在哪里
Vue的双向绑定是指数据的变化可以自动反映到视图上同时视图的变化也可以自动更新到数据上。这种双向绑定的实现是Vue框架的核心特性之一。
Vue的双向绑定原理主要包括以下几个关键点 数据劫持Data ObservationVue通过使用Object.defineProperty()方法来劫持监听数据对象的属性。当数据对象的属性被访问或修改时Vue会触发相应的getter和setter方法。 响应式系统Reactivity SystemVue通过响应式系统来追踪数据的变化。当数据对象的属性被修改时Vue会通知相关的视图进行更新。 模板编译Template CompilationVue使用模板编译器将Vue模板转换为渲染函数。在编译过程中Vue会解析模板中的指令和表达式并生成对应的渲染函数。 虚拟DOMVirtual DOMVue使用虚拟DOM来提高渲染性能。当数据发生变化时Vue会生成新的虚拟DOM并与旧的虚拟DOM进行比较找出需要更新的部分然后只更新需要更新的部分。 数据绑定Data BindingVue使用指令如v-model来实现数据的双向绑定。指令会将数据对象的属性与视图元素进行绑定当数据发生变化时视图会自动更新当视图发生变化时数据也会自动更新。
总结起来Vue的双向绑定原理是通过数据劫持、响应式系统、模板编译、虚拟DOM和数据绑定等机制来实现的。这些机制相互配合使得数据的变化可以自动反映到视图上同时视图的变化也可以自动更新到数据上从而实现了双向绑定的效果。
2、实现水平垂直居中的方式
3、常用伪元素有哪一些常用伪类有哪一些
常用的伪元素有以下几种
::before在元素内容之前插入一个伪元素。::after在元素内容之后插入一个伪元素。::first-letter选择元素内容的第一个字母。::first-line选择元素内容的第一行。::selection选择用户选中的文本部分。::placeholder选择表单元素的占位符文本。::marker选择列表项的标记部分。::backdrop选择模态框的背景部分。::cue选择音频或视频元素的提示部分如字幕。::spelling-error选择拼写错误的文本部分。::grammar-error选择语法错误的文本部分。
这些伪元素可以通过CSS的选择器来选择和样式化它们可以用来在元素的特定位置插入内容、样式化选中的文本、样式化表单元素的占位符文本等为页面提供更多的样式化和交互效果。
常用的伪类有以下几种
:hover选择鼠标悬停在元素上的状态。:active选择元素被激活鼠标按下的状态。:focus选择元素获得焦点的状态。:visited选择已访问过的链接。:first-child选择父元素的第一个子元素。:last-child选择父元素的最后一个子元素。:nth-child(n)选择父元素的第n个子元素。:nth-last-child(n)选择父元素的倒数第n个子元素。:nth-of-type(n)选择父元素的第n个指定类型的子元素。:nth-last-of-type(n)选择父元素的倒数第n个指定类型的子元素。:not(selector)选择不匹配给定选择器的元素。:empty选择没有子元素的元素。:checked选择被选中的表单元素如复选框、单选框。:disabled选择被禁用的表单元素。:enabled选择可用的表单元素。
这些伪类可以通过CSS的选择器来选择和样式化它们可以用来根据元素的状态、位置、类型等进行选择和样式化为页面提供更多的样式化和交互效果。
4、移动端如何适配不同屏幕尺寸
5、本地存储有哪一些他们三者有什么区别
6、JS的数据类型如何判断js的数据类型?
在JavaScript中有以下几种数据类型 基本数据类型Primitive Data Types String字符串表示文本数据使用引号单引号或双引号括起来。Number数字表示数值数据包括整数和浮点数。Boolean布尔值表示逻辑值只有两个值true真和false假。Undefined未定义表示未定义的值通常是声明了变量但未给其赋值。Null空值表示空值或不存在的对象。 引用数据类型Reference Data Types Object对象表示复杂的数据结构可以包含多个键值对。Array数组表示有序的集合可以包含多个元素。Function函数表示可执行的代码块。Date日期表示日期和时间。RegExp正则表达式表示文本模式的匹配规则。
判断JavaScript数据类型的方法有多种 使用typeof操作符typeof操作符可以返回一个变量的数据类型返回的结果是一个字符串。例如typeof variable。 使用instanceof操作符instanceof操作符可以判断一个对象是否属于某个类或构造函数的实例。例如variable instanceof Object。 使用Object.prototype.toString方法通过调用Object.prototype.toString方法可以返回一个对象的具体类型。例如Object.prototype.toString.call(variable)。 使用typeof和null判断由于typeof null返回object可以通过判断变量是否为null来判断是否为null类型。 使用Array.isArray方法Array.isArray方法可以判断一个变量是否为数组类型。例如Array.isArray(variable)。
需要注意的是typeof对于基本数据类型可以准确判断但对于引用数据类型除了函数会返回object无法准确判断具体的引用数据类型。因此结合多种方法可以更准确地判断JavaScript的数据类型。
7、说一下ES6的新特性有哪些
ES6ECMAScript 2015是JavaScript的一个重要版本引入了许多新的语法和功能。以下是ES6的一些主要特性 块级作用域Block Scope引入了let和const关键字可以在块级作用域中声明变量解决了var关键字的变量提升和作用域问题。 箭头函数Arrow Functions使用箭头定义函数简化了函数的写法并且自动绑定了this。 模板字符串Template Strings使用反引号包裹字符串可以在字符串中插入变量和表达式提供了更方便的字符串拼接方式。 解构赋值Destructuring Assignment可以从数组或对象中提取值并赋给变量简化了变量的声明和赋值过程。 默认参数Default Parameters在函数定义时可以为参数设置默认值简化了函数调用时的参数传递。 扩展运算符Spread Operator使用三个点…可以将数组或对象展开方便地进行数组合并、对象合并等操作。 类Classes引入了class关键字可以使用面向对象的方式定义类和构造函数并进行继承和方法的定义。 模块化Modules引入了import和export关键字可以将代码分割成多个模块方便地进行模块的导入和导出。 Promise提供了一种更优雅的处理异步操作的方式解决了回调地狱的问题。 箭头函数使用箭头定义函数简化了函数的写法并且自动绑定了this。 迭代器和生成器Iterators and Generators引入了迭代器和生成器的概念可以更方便地进行迭代操作。 模块化Modules引入了import和export关键字可以将代码分割成多个模块方便地进行模块的导入和导出。
这只是ES6的一部分特性还有其他一些特性如Map、Set、Promise、Symbol等。ES6的引入大大提升了JavaScript的开发效率和代码质量成为了现代前端开发的基础。
8、Let、const、var三者有什么区别
let、const和var是JavaScript中用于声明变量的关键字它们之间有以下区别 作用域let和const都是块级作用域而var是函数级作用域。块级作用域指的是在{}内部声明的变量只在该块内部有效而函数级作用域指的是在函数内部声明的变量在整个函数内部都有效。 变量提升let和const不存在变量提升即在声明之前使用会报错而var存在变量提升即可以在声明之前使用变量。 重复声明let和const不允许重复声明同一个变量而var允许重复声明同一个变量。 可变性let和var声明的变量可以被重新赋值而const声明的变量是常量不可被重新赋值。 全局对象属性let和const声明的变量不会成为全局对象的属性而var声明的变量会成为全局对象的属性。
综上所述推荐使用let和const来声明变量因为它们具有更严格的作用域和更好的代码可读性而var在现代JavaScript中使用较少主要是为了保持向后兼容性。
9、数组去重有哪些办法ES6新增构造函数set利用set具有天然去重功能 数组迭代
有多种方法可以对数组进行去重
使用Set将数组转换为SetSet会自动去除重复的元素然后再将Set转换回数组。
const arr [1, 2, 2, 3, 3, 4, 5];
const uniqueArr [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]使用filter和indexOf遍历数组使用indexOf方法判断当前元素在数组中的索引是否与当前索引相等如果相等则保留否则去除。
const arr [1, 2, 2, 3, 3, 4, 5];
const uniqueArr arr.filter((item, index) arr.indexOf(item) index);
console.log(uniqueArr); // [1, 2, 3, 4, 5]使用reduce和includes遍历数组使用includes方法判断当前元素是否已经存在于结果数组中如果不存在则添加到结果数组中。
const arr [1, 2, 2, 3, 3, 4, 5];
const uniqueArr arr.reduce((result, item) {if (!result.includes(item)) {result.push(item);}return result;
}, []);
console.log(uniqueArr); // [1, 2, 3, 4, 5]使用Map遍历数组使用Map数据结构来存储已经出现过的元素然后将Map的键转换为数组。
const arr [1, 2, 2, 3, 3, 4, 5];
const uniqueArr Array.from(new Map(arr.map(item [item, item])).values());
console.log(uniqueArr); // [1, 2, 3, 4, 5]这些方法都可以实现数组去重选择哪种方法取决于具体的需求和性能要求。
10、说一下深拷贝和浅拷贝如何自己实现一个深拷贝
深拷贝和浅拷贝是在复制对象或数组时的两种不同方式 浅拷贝浅拷贝是指创建一个新的对象或数组然后将原始对象或数组的引用复制给新对象或数组。这意味着新对象或数组与原始对象或数组共享相同的内存地址当修改其中一个对象或数组时另一个对象或数组也会受到影响。 深拷贝深拷贝是指创建一个新的对象或数组并递归地复制原始对象或数组的所有属性或元素。这意味着新对象或数组与原始对象或数组完全独立修改其中一个对象或数组不会影响另一个对象或数组。
要实现一个深拷贝可以使用递归和判断数据类型的方法来复制对象或数组的所有属性或元素。下面是一个简单的实现示例
function deepClone(obj) {// 判断是否为对象或数组if (typeof obj ! object || obj null) {return obj;}// 创建新的对象或数组const clone Array.isArray(obj) ? [] : {};// 递归复制属性或元素for (let key in obj) {clone[key] deepClone(obj[key]);}return clone;
}使用示例
const obj {name: John,age: 30,hobbies: [reading, coding],address: {city: New York,country: USA}
};const cloneObj deepClone(obj);
console.log(cloneObj);这样就可以实现一个简单的深拷贝函数。需要注意的是该实现只适用于普通的对象和数组对于包含函数、正则表达式等特殊类型的对象可能会出现问题。在实际开发中可以使用第三方库如lodash的cloneDeep方法来实现更完善的深拷贝功能。
11、Vue的生命周期有哪一些说一下它们每个阶段做什么操作
Vue 的生命周期包括以下几个阶段 beforeCreate在实例初始化之后数据观测 (data observer) 和 event/watcher 事件配置之前被调用。在这个阶段实例的属性和方法还没有被初始化。 created在实例创建完成后被调用。在这个阶段实例的属性和方法已经被创建可以访问和操作。 beforeMount在挂载开始之前被调用。在这个阶段模板编译已经完成但是还没有将模板渲染到页面上。 mounted在挂载完成后被调用。在这个阶段实例已经被挂载到页面上可以进行 DOM 操作。 beforeUpdate在数据更新之前被调用发生在虚拟 DOM 重新渲染和打补丁之前。在这个阶段可以对数据进行修改。 updated在数据更新之后被调用发生在虚拟 DOM 重新渲染和打补丁之后。在这个阶段可以执行一些操作比如访问更新后的 DOM。 beforeDestroy在实例销毁之前被调用。在这个阶段实例仍然完全可用可以执行一些清理操作。 destroyed在实例销毁之后被调用。在这个阶段实例的所有事件监听器和子组件都被移除可以进行一些最终的清理工作。
这些生命周期钩子函数可以用来在不同的阶段执行一些操作比如初始化数据、发送网络请求、订阅事件、操作 DOM 等。通过在对应的生命周期函数中编写代码可以实现更精细的控制和操作。
12、组件通讯方式有哪一些
在 Vue 中组件之间可以通过以下几种方式进行通讯 Props 和事件父组件可以通过 props 将数据传递给子组件子组件可以通过 $emit 触发事件并将数据传递给父组件。 自定义事件可以使用 $emit 和 $on 在组件之间传递消息和触发事件。 中央事件总线可以创建一个全局的 Vue 实例作为事件总线通过 $emit 和 $on 在任意组件之间传递消息和触发事件。 VuexVuex 是 Vue 的官方状态管理库可以用于管理应用的状态。通过在 Vuex 中定义状态和操作不同组件可以通过读取和修改共享的状态来进行通讯。 $refs可以使用 $refs 来访问子组件的属性和方法。 provide 和 inject父组件可以通过 provide 提供数据子组件可以通过 inject 注入数据。这种方式可以实现跨层级的组件通讯。 EventBus可以使用一个独立的事件总线对象来进行组件之间的通讯。 $parent 和 $children可以使用 $parent 和 $children 来访问父组件和子组件的属性和方法。
以上是常用的组件通讯方式根据具体的场景和需求选择合适的方式进行组件之间的通讯。
13、Vuex有几个属性及作用
14、Vue的监听属性和计算属性有什么区别
15、说一下防抖和节流。怎么实现
16、Vue的导航守卫有哪一些
17、你的登录拦截怎么实现的
18、有用过图表吗用的多吗
19、闭包是什么如何实现
20、Vue2.0和vue3.0有什么区别
21、Vue常用的指令有哪些
22、v-If和v-show有什么区别
23、v-for为什么要加一个key
24、你是如何封装一个组件的
25、有自己从0到1搭建过项目吗
26、有用过uni-app吗
27、你会写后台吗有搞过服务端渲染吗
28、说一下你项目中遇到的难点如何解决
29、Url到浏览器的一个过程有哪些步骤
30、如何实现小程序的request封装及拦截
31、在vue的项目应用中不使用框架怎么封装
32、什么是Js原型原型链是什么
33、组件通讯方式有哪些
34、用闭包的原理做过哪些
35、作用域是什么
36、操作数组的方式有哪些
37、0.1 0.2 等于 0.3吗为什么如何解决
38、keep-alive是什么有哪几个生命周期阶段
39、判断一个变量是否是数组有哪些办法
40、判断一个变量是否是对象有哪些办法
41、对象/数组常用方法有哪些
42、创建一个空数组/空对象有哪些方式
43、哪些遍历方式会改变原数组
44、Set和Map各是什么
45、介绍一下promise。
46、Promise通常会解决三种问题
(1)链式回调
(2)同时发起几个异步请求谁先有结果就拿谁的
(3)发起多个请求等到所有请求后再做下一步处理
这三种方式promise是怎么处理的
47、如何改变一个函数a的上下文
48、Call和replay有什么区别
49、Evenbus是什么东西
50、Vue中普通的生命周期大概有哪些
51、父子组件生命周期执行顺序是怎么样的
52、mixins有几个生命周期阶段
53、弹性布局一行两列一列固定宽如何实现
54、Flex1 包含哪三种属性