问
在 Vue.js 中,你可以直接通过 this.location 来访问当前页面的 URL吗?
答案
不能
Vue.js 组件实例并没有内置的 location 属性来获取 URL。相反,通常情况下,你可以通过JavaScript 的 window.location
对象来获取当前页面的 URL 信息。
拓展:在 js 函数中也不能使用 this.location 获取URL。全局函数和对象方法都不行。都是要使用 window.location
, window.location
包含了当前页面的URL相关信息。
弄混的地方
我在在线js编译器以及f12中都能输出 this.location
原因
标准的 JavaScript 在浏览器环境中,全局函数的 this 默认指向全局对象 window,但全局函数本身并没有 location 属性。因此,正确的做法仍然是使用 window.location 来访问当前页面的 URL,这是广泛接受和标准化的做法,适用于所有主流浏览器和 JavaScript 运行时环境。
如果你在特定的环境中发现 this.location 可用,并且能够成功获取页面 URL,这可能是该环境对 JavaScript 上下文或全局对象进行了某种定制化或特殊处理。
问
提出三种以上优化vue性能的方法
答
问
vue如何实现动态组件,并举例说明使用场景。
答
使用 <component>
元素并配合动态绑定的 is
使用场景:Tab切换、表单步骤、权限控制(普通用户跟管理员看到的不一样)
__生命周期和属性冲突解决__
生命周期钩子
,如果多个 Mixin 定义了相同的钩子,Vue 会按照混入的顺序依次调用它们,最后再调用组件自身的生命周期钩子。const mixinA = {
created() {
console.log('Mixin A created');
}
};
const mixinB = {
created() {
console.log('Mixin B created');
}
};
Vue.component('my-component', {
mixins: [mixinA, mixinB],
created() {
console.log('Component created');
}
});
输出顺序
Mixin A created
Mixin B created
Component created
data,methods
等选项,如果多个 Mixin 中定义了相同的键,Vue 会采用 “最后声明优先” 的原则,即后面声明的 Mixin 会覆盖之前的声明。组件自身的 data 属性和 method 方法如果与任何 mixin 中的定义冲突,最终会被最后混入的 mixin 所覆盖。const mixinA = {
data() {
return {
message: 'Mixin A message'
};
}
};
const mixinB = {
data() {
return {
message: 'Mixin B message'
};
}
};
Vue.component('my-component', {
mixins: [mixinA, mixinB],
template: `
<div>
<p>{{ message }}</p>
</div>
`
});
输出的 message 将会是 Mixin B message,因为 mixinB 在 mixinA 后面声明。
10、vue3中的各种ref用法
ref()
: 接收一个值并返回一个响应式的对象,可以使用.value
属性来访问和修改这个值,模版中使用的时候可以省略.value
。toRef(obj, key)
: 根据一个响应式对象中的一个属性,创建一个响应式的 ref,并且该 ref 和原对象中的属性保持同步。toRefs(obj)
: 将一个响应式对象转换成一个普通对象,其中普通对象的每个属性都是响应式的 ref。isRef(value)
: 判断某个值是否是 ref 对象。unref(value)
: 用于解除响应式引用shallowRef(value)
: 创建一个浅层的 ref,只有 value 属性是响应式的,深层的属性不具备响应式。triggerRef(ref)
: 强制浅层的 ref 发生改变时触发响应式。customRef(factory)
: 自定义 ref 对象,可以显式地追踪某个值的响应式变化。问
ref 和 reactive 的区别
答
题目
如果给一个元素设置background-color,它的颜色会填充哪些区域
答案
background填充区域默认为content、padding、border区域。
解析
关于为什么有些css属性要加-webkit前缀
要跟
box-sizing
区分
- box-sizing 属性定义如何计算一个元素的总宽度和总高度,主要设置是否需要加上内边距(padding)和边框等(盒模型切换)
- 默认值:
content-box
(标准盒模型)
元素实际大小 = width(content) + padding + border + margin- 其他值:
border-box
(IE怪异盒模型):
元素实际大小 = width(content + padding + border)+ margin
inherit
从父元素继承- 不管box-sizing的值是什么,都不会影响原有的背景剪裁方式,都是通过
background-clip
的值决定
问
position:relative是如何进行定位的
答
是元素相对于自身在文档流中位置的微调。不会脱离文档流。
(其他的作用就是为了给子元素做absolute绝对定位的参照物)
问
position:absolute是相对于什么进行定位的
答
相对与最近的有 position 定位且非 static 的祖先元素(或者文档根元素)。(包括relative、fixed、absolute)
答
问
如何实现一个九宫格的抽奖,要求整体为正方形,里面的小格也是正方形。
padding-top
/ padding-bottom
父元素宽度
来计算的。.square {
width: 50%;
padding-top: 50%; // 用padding-top或者padding-bottom把盒子撑起来
}
拓展
aspect-ratio
min-aspect-ratio
和 max-aspect-ratio
分别查询最小和最大的值。element {
aspect-ratio: auto; // 默认值,不设置比例
aspect-ratio: 1/1; // 正方形
aspect-ratio: 16/9; // 宽屏视频比例
aspect-ratio: 9/16; // 移动端竖屏视频比例
}
/* 最小宽高比 */
@media (min-aspect-ratio: 8/5) {
div {
background: #9af; /* blue */
}
}
/* 最大宽高比 */
@media (max-aspect-ratio: 3/2) {
div {
background: #9ff; /* cyan */
}
}
/* 明确的宽高比,放在最下部防止同时满足条件时的覆盖*/
@media (aspect-ratio: 1/1) {
div {
background: #f9a; /* red */
}
}
问
css 动画特性知道哪些
答
@keyframes
创建动画animation
绑定动画、 transform
转换器结合transition
过渡效果、:hover等鼠标事件结合transition
过渡效果
@keyframes
创建动画animation
绑定动画// 百分比
@keyframes myfirst
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
@-webkit-keyframes myfirst /* Safari 与 Chrome */
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
// from to
@keyframes myfirst
{
from {background: red;}
to {background: yellow;}
}
@-webkit-keyframes myfirst /* Safari 与 Chrome */
{
from {background: red;}
to {background: yellow;}
}
// 绑定
.div{
animation:myfirst 5s;
-moz-animation:myfirst 5s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
-o-animation:myfirst 5s; /* Opera */
}
transform
转换器结合transition
过渡效果div {
width: 100px;
height: 100px;
background: red;
-webkit-transition: width 2s, height 2s, -webkit-transform 2s; /* For Safari 3.1 to 6.0 */
transition: width 2s, height 2s, transform 2s;
}
div:hover {
width: 200px;
height: 200px;
-webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */
transform: rotate(180deg);
}
transition
过渡效果.list img {
background: blue;
width: 10px;
height: 10px;
}
.list>p:nth-child(even) img {
background: red;
}
.list>p:last-child img {
background: yellow;
}
<div class="list">
<p><img/></p>
<p><img/></p>
<div class="sub-list">
<p><img/></p>
<p><img/></p>
</div>
<p><img/></p>
<div class="sub-list">
<p><img/></p>
</div>
</div>
- img元素的颜色是什么?
- blue red blue blue red blue
子元素选择器
与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素直接/一级子元素
的元素。
:nth-child(n) 选择器
直接使用时,该选择器匹配父元素中的第 n 个子元素,元素类型没有。element:nth-child(n)
该选择器匹配(与element)同类型中的第 n 个同级兄弟元素
n 是一个参数,可以是关键字(如 odd 或 even),或者一个表达式(如 2n+1)
odd
选择奇数
位置的子元素。
even
选择偶数
位置的子元素。
div :nth-child(2) // 匹配每一个div中第二个子元素的背景色
{
background:blue;
}
p:nth-child(2) // 匹配每一个p的父元素的子元素中处于第二个子元素的p
{
background:blue;
}
上面的代码中
// 表示匹配list的直接子元素中处于偶数位置的p标签
.list>p:nth-child(even) img {
background: red;
}
// 表示匹配list直接子元素中的最后一个元素,且该元素为p标签,但是在这里list直接子元素的最后一个元素是class为 sub-list 的div标签,并不是p标签。
.list>p:last-child img {
background: yellow;
}
改一下
// 表示匹配list的后代中,每一个在其父级中位于偶数位置的p标签
.list p:nth-child(even) img {
background: red;
}
问
< p>标签里面可以放< div> 吗?可以放< br/>吗?可以发放 ;吗?
答
自动闭合
,所以不能够在< p>标签里面嵌套< div>。 ;
表示非断空格。空格会被浏览器渲染,但多个连续的空格会被合并成一个。其他嵌套规则
<div><h1></h1><p></p></div> —— 对
<a href=”#”><span></span></a> —— 对
<span><div></div></span> —— 错
<p><ol><li></li></ol></p> —— 错
<p><div></div></p> —— 错
h1、h2、h3、h4、h5、h6、p、dt
<div><h2></h2><p></p></div> —— 对
<div><a href=”#”></a><span></span></div> —— 对
<div><h2></h2><span></span></div> —— 错
其他空格实体
以上均为 == 或 !=
console.log(0 == '') // true
console.log(0 == []) // true
console.log(0 == false) // true
console.log('' == []) // true
console.log('' == false) // true
console.log([] == false) // true
console.log(null == undefined) // true
console.log(null === undefined) // false
console.log(null == '') // false
console.log(null == 0) // false
console.log(null == []) // false
console.log(null == false) // false
console.log(undefined == '') // false
console.log(undefined == 0) // false
console.log(undefined == []) // false
console.log(undefined == false) // false
console.log(!!'0') // true
if ([]){
console.log('是true')
}else {
console.log('是false')
}
// 是true
console.log([] == []) // false
console.log([] === []) // false
console.log([1,2,3] === [1,2,3]) // false、
console.log(typeof null == typeof window) // true 都是 object
console.log(new String('A') == 'A') // true
console.log(new String('A') === 'A') // false
console.log(typeof new String('A')) // object
都是接受一个可迭代对象作为参数,返回一个新的 Promise 对象。
console.log(1)
setTimeout(() =>{
Promise.resolve().then(() => {
console.log(2)
})
console.log(3)
},0)
new Promise((resolve, reject) => {
let i = 0;
for (i;i<=1000;i++) {
if (i === 1000) {
resolve()
}
}
console.log(4)
}).then(() =>{
console.log(5)
})
console.log(6)
// 输出 1、4、6、5、3、2
console.log(1)
setTimeout(() => {
console.log(2)
},0)
new Promise((resolve, reject) => {
for (let i = 0;i<10000;i++) {
console.log('循环执行中')
if (i === 9999) {
console.log(5);
resolve();
}
}
console.log(3)
}).then(() => {
console.log(4)
})
// 1
// (10000输出) 循环执行中
// 5
// 3
// 4
// 2
console.log(1)
setTimeout(() => {
console.log(2)
},0)
new Promise((resolve, reject) => {
setTimeout(() => {
console.log(5)
resolve();
},0);
console.log(3)
}).then(() => {
console.log(4)
})
// 1 3 2 5 4
console.log(1)
setTimeout(() => {
console.log(2)
},5000)
new Promise((resolve, reject) => {
setTimeout(() => {
console.log(5)
resolve();
},0);
console.log(3)
}).then(() => {
console.log(4)
})
// 1 3 5 4 2
答
get、post、put、delete
问
比如有一个频繁切换的tab页,调用同一个接口,在切换的时候上一个tab页的数据请求还未完成,导致渲染错误,如何解决?
答
AbortController
CancelToken
问一
什么情况会发生跨域?如何解决?
答
跨域指的是浏览器的同源策略(Same-Origin Policy)所的一种情况,即在一个源(Origin)的文档或脚本试图去获取另一个源服务器上的数据时所面临的。
如果两个 URL 的协议、域名和端口
三者完全相同,则称它们属于同一个源,否则就是跨域。
解决
CORS
(跨域资源共享):推荐且最常用的解决方案。服务器
通过设置 HTTP 头部信息来声明允许哪些源(域、协议、端口)的请求可以访问资源。具体可以通过设置响应头部 Access-Control-Allow-Origin
来允许指定的源访问。devServer
的 proxy
选项(一般是开发环境)其他方法
问二
CORS配置是哪个头部?什么时候用通配*?什么时候必须指定具体的域名?
答
Access-Control-Allow-Origin,
问
以下哪种情况会导致重排/重绘的发生?
重排
(Reflow)浏览器根据当前的布局信息重新计算元素的位置和大小,并重新绘制页面的过程。重排是DOM元素的几何属性变化,DOM树的结构变化,渲染树需要重新计算。
重绘
(Repaint)当元素的样式发生变化,比如颜色、背景色等,浏览器会重新绘制这个元素,但不会改变它的位置和大小。
重绘消耗的资源较少,因为它只是更新像素的颜色和样式,而不涉及布局计算。
关系:重绘不会引起重排,但重排一定会引起重绘,一个元素的重排通常会带来一系列的反应,甚至触发整个文档的重排和重绘,性能代价是高昂的。
触发重排的情况:
触发重绘的情况:
重排优化方法
合并多次修改:避免多次对 DOM 和样式的频繁操作,可以将多个操作合并为一次操作,或者在操作前先使元素脱离文档流(比如使用 display: none 隐藏元素),完成操作后再放回文档流。
将需要多次重排的元素,position属性设为absolute或fixed,这样此元素就脱离了文档流,它的变化不会影响到其他元素(只会重绘)。例如有动画效果的元素就最好设置为绝对定位。
使用 CSS 动画:使用 CSS 动画而非 JavaScript 控制动画,因为 CSS 动画可以由浏览器优化,减少重排和重绘的次数。
缓存布局信息:如果需要多次读取某个元素的尺寸或位置信息,可以将这些信息缓存起来,避免多次触发浏览器的重排操作。
优化样式和布局:尽可能使用简单的布局方式,避免复杂的嵌套结构和过多的浮动元素,这样可以减少浏览器计算布局的复杂度。
在内存中多次操作节点,完成后再添加到文档中去。例如要异步获取表格数据,渲染到页面。可以先取得数据后在内存中构建整个表格的html片段,再一次性添加到文档中去,而不是循环添加每一行。
问
什么是跨域?举例说明具体的跨域场景。可以如何解决跨域?
答
看看能不能直接确认问题所在,可以检查日志、网络请求,不行的话就可以去开发或者测试环境中尝试复现,缩小问题范围,定位问题。也可以检查版本更新,看看有没有新的代码提交,有可能是变更引入的新问题。
就是存储储藏!
git stash
git stash list
git stash apply
:应用最新的 stash,但并不删除 stash 列表中的记录。git stash pop
:应用最新的 stash,并从 stash 列表中删除这个 stash。git stash clear
git revert
)git reset
)async function inputNum (Max) {
let i = 0;
while(i < Max) {
console.log(i);
i++;
await delay(1000);
}
}
function delay(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
},time)
})
}
inputNum(5);
const map = new Map()
map.set(true, 0)
map[true] = 10
console.log(map.get(true))
console.log(map.get('true'))
console.log(map['true'])
// 输出 0 undefined 10
const map = new Map()
map['bla'] = 'balala'
console.log(map.has('bla')) // false
console.log(map.delete('bla')) // false
设置对象属性同样适用于 Map 对象,但这种设置属性的方式不会改变 Map 的数据结构。它使用的是通用对象的特性。‘bla’ 的值未被存储在 Map 中,无法被查询到。其他的对这一数据的操作也会失败。
var num = 10
function cls () {
this.num = 0;
return {
num: 100,
getNum:() =>{
console.log(this.num);
},
getNum2() {
console.log(this.num);
}
}
}
const o = new cls();
o.getNum();
o.getNum2();
// 输出 0 100
答
最开始是做ATM设备的研发、生产和销售业务,以及ATM上的软件,19年的时候转型数字化,专注于智能安防领域。我们部门主要就是为各大银行提供综合解决方案,以满足银行在内控合规、信息展示和安全监控等方面的需求。
缺点就是比较犟,有时候会钻牛角尖,
答
AI答案:+ 之前那个层级划分的(向高级前端和前端专家进发)
深入技术领域:专注于某些前端技术栈或框架的深入学习和应用,如React、Vue、Angular等,成为在该领域中的专家。
全栈发展:扩展技能,学习后端开发或者与后端开发更密切相关的技术,例如Node.js、Express等,实现全栈开发能力。
技术领导角色:朝着技术领导、团队负责人等角色发展,带领团队完成复杂项目,并负责技术架构和决策。
答
基本工资、岗位工资、绩效工资、年终奖、项目奖金、补贴(津贴)
答
好学 + 学习途径+项目遇到问题解决办法
理解需求 分模块 明确设计 讨论数据表 选择合适的框架
答
答案
如果要访问的话可以怎么做
let that = this;
export defualt {
data () {
value1: 1,
}
beforeCreate () {
that = this;
},
filters: {
dataFilter (value) {
return value + that.value1;
}
}
}
实现懒加载的方式有两种
-webkit-
-moz-
-ms-
-o-
作用:确保在不同浏览器中都能正确地显示和运行,特别是对于旧版本的浏览器,做一个向后兼容。
在 CSS 中,有些新特性在其最初引入时可能不是所有浏览器都支持,或者支持的方式有所不同。为了确保在各种浏览器上都能正常显示和相同的运行效果,开发者会使用厂商前缀(vendor prefixes),比如 -moz-、-webkit-、-o- 等。
这些前缀的目的是在新特性尚未成为 CSS 标准的一部分之前,提供一种方式让开发者尝试和使用这些新功能,同时确保向后兼容性。同时书写没有前缀的标准属性,就是为了之后加入标准之后的显示的一致性,做向前兼容。
答案
数据类型:Number、String、Boolean、Null、Undefined(基本数据类型)、Object(引用数据类型,包括:function、Array、Date等)、Symbol、BigInt(ES6新增)。
BigInt 安全存储和操作大整数
Symbol类型的对象永远不相等,即使创建时传入相同的值
比如:Symbol(‘A’) == Symbol(‘A’)false
作用:创建唯一的属性名,防止属性名冲突,模拟私有属性和方法。
console.log(typeof {}) // object
console.log(typeof []) // object
console.log(typeof null) // object
console.log(typeof undefined) // undefined
console.log(function(){}) // function ( ƒ (){} )
console.log(typeof NAN) // number
NaN
(“Not-a-Number”)非数值。数据类型是number
,可以使用isNaN
判断是不是NaN
NaN == NaN // false
Number(value)
在转换非数值时可能返回NaN,比如Number(undefined)、Number(‘1ae’)
答案
null 是一个空指针对象,undefined表示一个声明了但是没有赋值的变量的默认值。
答案
= = 是相等比较运算符,而= = =是严格相等比较运算符。= = =是比较值的类型和值是否完全相同。而 = = 在比较前会进行隐式类型转换,如果比较的两个值是不同的类型,会转换成相同的类型再进行比较。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务