首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

送你58道JavaScript面试题(上)

我们没有修改数组第一个元素,而只是修改了变量 person,因为元素(复制而来)引用与 person不同。members第一个元素仍然保持着对原始对象引用。...底层,对象key都是字符串(如果他们不是Symbol的话)。每次循环中,我们将 item设定为当前遍历到key.所以一开始, item是 name,之后 item输出则是 age。...当函数没有返回任何时,即默认返回 undefined.对数组中每一个元素来说,函数块都得到了这个返回,所以结果中每一个元素都是 undefined. ---- 51. 下面代码输出是什么?...而我们使用 defineProperty方法给对象添加了一个属性之后属性默认为 不可枚举(not enumerable)....push方法修改原始数组,如果你想从函数返回数组而不是数组长度,那么应该在push item之后返回 list。 ----

75920

高性能JavaScript

5、DOM操作量化问题: // 坏中更新页面,问题所在:每次循环都对DOM元素访问了两次 // 一次是读取document.getElementById('here').innerHTML内容...9、需要考虑实际情况优化,根据7,可以将集合中元素通过for坏赋值到数组中,访问数组数组快于集合。但是要注意对于复制开销是否值得。...12、重绘和重排版; 重绘:不需要改变元素长度和宽度,不影响DOM几何属性; 重排版:影响了几何属性,需要重新计算元素几何属性,而且其他元素几何属性有可能也会受影响。...、clientTop、clientLeft、clientHeight、geteComputedStyle()(IE中此函数成为currentStyle);浏览器此时不得不进行渲染队列中带改变项目,并重新排版以返回正确...如果没有此步骤的话,每次对第二步改变都有可能带来重排版。)

68210
您找到你想要的搜索结果了吗?
是的
没有找到

来自大厂 10+ 前端面试题附答案(整理版)_2023-03-15

重写后方法会先执行它们本身原有的逻辑,并对能增加数组长度 3 个方法 push、unshift、splice 方法做了判断,获取到插入,然后把新添加变成一个响应式对象,并且再调用 ob.dep.notify...,添加监听数据订阅者,一旦数据有变动,收到通知,更新视图Watcher 订阅者是 Observer 和 Compile 之间通信桥梁,主要做事情自身实例化时往属性订阅器 (dep) 里面添加自己待属性变动...grid子项,即:父元素display:gridopacity 属性小于 1 元素(参考 the specification for opacity),transform 属性不为 "none"元素...,mix-blend-mode 属性不为 "normal"元素,filter不为"none"元素,perspective不为"none"元素,clip-path不为"none"元素mask...,也是元素末尾添加一个点并带有 clear: both 属性元素实现

56720

2021Vue.js面试题汇总及答案【全网最全 建议收藏】「建议收藏」

Vue.js 双向绑定原理 1.4.Vue中如何监控某个属性变化?...,添加监听数据订阅者,一旦数据有变动,收到通知,更新视图 3.Watcher订阅者是Observer和Compile之间通信桥梁,主要做事情是: ①自身实例化时往属性订阅器(dep)里面添加自己...这是因为Vue实例创建时,新属性并未声明,因此就没有被Vue转换为响应式属性,自然就不会触发视图更新,这时就需要使用Vue全局 api $set(): this....1.23.批量异步更新策略 Vue 修改数据后,视图不会立刻更新,而是等同一事件循环中所有数据变化完成之后,再统一进行视图更新。...和 Promise.then 异步更新队列 可能你还没有注意到,Vue 更新 DOM 时是异步执行

8.6K30

【ES】199-深入理解es6块级作用域使用

如下: for(let i = 0;i < 100;i++){ //执行某些操作 } //报错 console.log(i); 6.循环中创建函数 使用var声明变量环中,创建一个函数非常困难...由于函数有自己作用域,因此向数组中添加函数时候,实际上循环已经运行完成,因此每次打印变量i都相当于是全局中访问变量i,即i = 5这个,因此实际上答案最终会返回5次5....(function(){ console.log(key) }) } func.forEach(function(func){ func();//name,age }); 这里并没有修改key...for-of循环是es6新增坏。。 7.全局作用域绑定 let,const声明与var声明还有一个区别就是三者全局作用域中行为。...);//返回'这是数组'; 从上例,我们可以知道即使全局作用域中已经定义了Array变量或者已经存在了Array属性,但我们之后定义Array变量则会覆盖之前已经定义好或者已经存在Array变量

3.7K10

12道vue高频原理面试题,你能答出几道?

没有的话,仅仅把 this.dirty = true。(当计算属性依赖于其他数据时,属性并不会立即重新计算,只有之后其他地方需要读取属性时候,它才会真正计算,即具备 lazy(懒计算)特性。)...和 Promise.then 异步更新队列 可能你还没有注意到,Vue 更新 DOM 时是异步执行。...如果存在,直接取出缓存更新该 key this.keys 中位置(更新 key 位置是实现 LRU 置换策略关键) this.cache 对象中存储该组件实例并保存 key ...,之后检查缓存实例数量是否超过 max 设置,超过则根据 LRU 置换策略删除最近最久未使用实例(即是下标为 0 那个 key) 最后组件实例 keepAlive 属性设置为 true...LRU keep-alive 实现正是用到了 LRU 策略,将最近访问组件 push 到 this.keys 最后面,this.keys[0]也就是最久没被访问组件,当缓存实例超过 max 设置

90960

第 9 章 顺序容器

不会失效可以理解为只是交换了指针所指向地址,指针所指向本身并没有发生变化,所以迭代器(指向原来物理内存)仍旧有效。...**所以添加和删除forward_\list中元素操作是通过改变给定元素之后元素来完成。...定义了首前迭代器 before_begin,指向链表首元素之前并不存在元素。 insert_after(p, n, t),迭代器 p之后位置插入元素,返回指向最后一个插入元素迭代器。...vector和 string 添加 如果存储空间被重新分配,则所有迭代器、指针或引用都会失效;如果未重新分配,则插入位置之前还有效,之后将会失效。...如果在一个循环中插入/删除 deque、string和vector中元素,不要缓存 end返回迭代器,应该在每一步循环中更新这个迭代器。

83650

求职 | 史上最全web前端面试题汇总及答案2

然而,以下情况中,请使用 POST 请求: ①无法使用缓存文件(更新服务器上文件或数据库)向服务器发送大量数据(POST 没有数据量限制)。...(2) 调用函数时,应该提供参数没有提供,该参数等于undefined。 (3)对象没有赋值属性,该属性为undefined。 (4)函数没有返回时,默认返回undefined。...join:使用指定间隔符连接所有元素为字符串 push尾部添加元素并维护array实例length splice与slice都是截取一部分元素。...尾部添加使用push(); 头部添加使用unshift(); 在任意位置添加使用splice(),但要注意把它删除个数设置为0; array详细介绍请看下文链接 JS中数组对象详解 20、简述javascript...①addClass:为元素设置class属性,如果该元素已经存在class属性,则在其添加空格及新class。 ②css:操作元素style属性方法。 9、如何获取一个元素实际位置?

6K20

Js面试题__附答案

34、JavaScript中使用Push方法是什么? push方法用于将一个或多个元素添加或附加到数组末尾。使用这种方法,可以通过传递多个参数来附加多个元素。...35、什么是JavaScript中unshift方法? Unshift方法就像在数组开头工作push方法。该方法用于将一个或多个元素添加到数组开头。 36、对象属性如何分配?...for-in循环语法是: 每次循环中,来自对象一个属性与变量名相关联,循环继续,直到对象所有属性都被耗尽。 42、描述JavaScript中匿名函数?...该方法在数组启动时起作用,与push()不同。 它将所需数量元素添加到数组顶部。例如: ?...标签之后代码中添加标签之前添加“// - >”代码中没有引号。 旧浏览器现在将JavaScript代码视为一个长HTML注释。而支持JavaScript浏览器则将“<!

8.8K30

「算法与数据结构」JavaScript中链表

指针指向新添加元素即可 新添加元素 next 指针默认为 null,链表最后一个元素 next 也就为 null,另外,将节点挂到链表上之后,还需将链表长度加 1,保证 length 属性等于链表长度...,我们说 JS 是一门解释型高级语言,它底层实现并不像我们看起来那么简单规,有点打破常规意思 讲这里,你可能会吐槽这一篇文章好不容易看完了,现在你给我说没用。。。...,虽然总时间依然很长,但是每个小片执行完之后,都给其他任务一个执行机会,这样唯一线程就不会被独占,其他任务依然有运行机会,React 中 Fiber 就把整个 VDOM 更新过程碎片化 之前...这个方法更新时候是进行递归操作,如果在更新过程中有大量节点需要更新,就会出现长时间占用 JS 主线程情况,并且整个递归过程是无法被打断,由于 JS 线程和 GUI 线程是互斥(详看「硬核...JS」一次搞懂JS运行机制 ),所以大量更新情况下你可能会看到界面有些卡顿 Fiber 架构其实就解决两个问题,一是保证任务浏览器空闲时候执行,二是将任务进行碎片化,接下来我们简单说下 Fiber

86110

谈一谈JavaScript内存模型

栈内存中分配一块空间(将在运行时完成分配) 将 23 保存在这个分配出去空间中 ?... JS 中,基本数据类型是不可改变 “myNumber + 1” 被解析为 “24” 时候,JS 实际上将会在内存中重新分配一块新空间用于存放 24 这个,而 myNumber 将会转而指向这个新内存空间地址...而错误根源在于,这些人认为往数组中添加元素改变它。 所谓“改变”,实际上指的是内存地址改变。let 声明变量允许我们修改内存地址,而 const 则不允许。...const myArray = [] 声明 myArray 之后,调用栈会分配一块内存空间,它所存放是指向堆中某个被分配内存空间地址。而堆中这个空间才是实际上存放空数组地方。...之后我们试图把新内存地址赋值给 myArray,这样显然也是会报错。 ? 对于用 const 声明对象,它和数组表现也是一样。因为对象也是引用类型数据,可以添加键,更新,诸如此类。

65220

C++初阶:适合新手手撕vector(模拟实现vector)

_endOfStorage:指向动态数组分配内存空间末尾之后位置指针。...迭代器失效原因主要有以下几种: 插入操作:当在容器中插入元素时,可能会导致容器内部元素发生移动或重新分配内存,这会导致原先迭代器失效。因为插入元素后,原先迭代器可能不再指向正确位置。...重新分配内存(扩容时):某些容器元素数量达到一定阈值时会进行内存重新分配,这会导致原先迭代器失效。因为重新分配内存后,原先迭代器可能指向了无效内存地址。...如果使用 v.erase(it);,则会导致 it 迭代器失效,因为它指向元素已经被删除,而 it 没有更新。...因此,为了确保迭代器有效性,需要将返回迭代器赋值给 it,以便在下一次循环中继续使用正确迭代器。

22210

9 种你或许不知道 Vue 好用小技巧

路由项目启动页和 404 页面 9. Vue 调试神器:vue-devtools 1. 组件 style scoped: 问题:组件中用 js 动态创建 dom,添加样式不生效。...所以原因就很清楚了:因为动态添加 dom 没有 scoped 添加标识,没有跟 testAdd 样式匹配起来,导致样式失效。...OBKoro1'} 由于 js 限制,Vue 不能检测以上数组变动,以及对象添加/删除,很多人会因为像上面这样操作,出现视图没有更新问题。...选项:deep 选项参数中指定 deep: true,可以监听对象中属性变化。 2....手动安装 安装之后 chrome 开发者工具中会看一个 vue 一栏,如下对我们网页应用内数据变化,组件层级等信息能够有更准确快速了解。

89420

前端-Vue,你或许不知道这些小技巧

路由懒加载写法 路由项目启动页和404页面 Vue调试神器:vue-devtools ---- 组件stylescoped: 问题:组件中用js动态创建dom,添加样式不生效。...所以原因就很清楚了:因为动态添加dom没有scoped添加标识,没有跟testAdd样式匹配起来,导致样式失效。...console.log(obj);  // {b:2,c:'OBKoro1'} 由于js限制,Vue 不能检测以上数组变动,以及对象添加/删除,很多人会因为像上面这样操作,出现视图没有更新问题...选项:deep 选项参数中指定 deep: true,可以监听对象中属性变化。...手动安装 安装之后chrome开发者工具中会看一个vue一栏,如下对我们网页应用内数据变化,组件层级等信息能够有更准确快速了解。

1K10

简单实现一个Virtual DOM

接下来简单说一下比较过程 1.比较属性变化 遍历旧属性,找到被删除和修改情况 新属性中不存在,旧属性存在,属性被删除 新旧属性中都存在,但是不同: 属性被修改 遍历新元素属性,找到添加属性...== oldProps[propKey]) { // 新旧属性中都存在,但是不同: 属性被修改 currentIndexPatches.push({...比如以下这个情况: 我们希望可以B和C之间加一个F,Diff算法默认执行起来是这样: 即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?...所以我们需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确识别此节点,找到正确位置区插入新节点。 所以一句话,key作用主要是为了高效更新虚拟DOM。...另外vue中使用相同标签名元素过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们,否则vue只会替换其内部属性而不会触发过渡效果。

76630

【JavaScript】 基础

){ 循环体; } 循环控制 : break 强制结束循环 continue 结束当次循环,开始下一次循环 循环嵌套 : 环中嵌套添加其他循环 函数 作用 封装一段待执行代码 语法...自动为每位数据分配下标,从0开始 数组中元素不限数据类型,长度可以动态调整 动态操作数组元素 :根据元素下标读取或修改数组元素,arr[index] 属性和方法 属性 : length 表示数组长度...,可读可写 方法 : push(data) 在数组末尾添加一个或多个元素,多个元素之间使用逗号隔开 返回添加之后数组长度 pop() 移除末尾元素 返回被移除元素 unshift(data) 在数组头部添加一个或多个元素...返回添加之后数组长度 shift() 移除数组第一个元素 返回被移除元素 splice(index,num) 从数组中添加 / 删除项目 返回被删除项目 toString() 将数组转换成字符串类型...,自动为字符分配下标,从0开始 属性 length :获取字符串长度 方法 转换字母大小写 toUpperCase() 转大写字母 toLowerCase() 转小写字母 返回转换后字符串

2.1K20
领券