看了涡流大佬的面试文章的总结(js, css篇)

简介: 看了涡流大佬的面试文章的总结(js, css篇)

js篇


requestAnimationFrame 实现的动画效果比 setTimeout 好的原因


requestAnimationFrame是在下一帧动画重绘之前执行传入的函数。能够保证传入的回调函数执行次数通常与浏览器屏幕刷新次数相匹配,一般是每秒钟60次。


但是setTimeout函数执行的间隔时间不一定是约定好的间隔时间,还与当前事件循环中的任务执行的时间有关,如果执行的时间太长的话,setTimeout里面的函数将会被延迟执行。


Map和Set的区别,Map和Object的区别


map:类似于对象,键值对的集合。任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构。 set:类似于数组。存储一个无重复元素的集合。 map的键名可以是任意类型的格式。但是Object键值只能存储字符串类型。对于键值的覆盖。map存储引用类型的键值对。只有当地址相同的键名才会被覆盖。


数组的filter、every、flat的作用是什么


filter:过滤数组 every:判断数组中每个元素都符合条件 flat:展开嵌套数组。


es6有哪些新特性


  • 增加块级作用域。const,let。


  • 增加promise。来解决回调地狱。


  • 增加async await 。让异步代码同步书写。


  • 解决NaN不等于NaN,0等于-0等严格相等判断的缺陷。


  • 增加set,map数据结构。


  • 增加模块化。


  • 增加class,创建类的语法糖。



Promise的all和race有什么区别


  • all:传入的promises数组状态全部变为fulfilled时,该promise状态才变为fulfilled。只要有一个promise变为rejected时,该promise状态就变为rejected。


  • race:表示传入的promises数组只要一个状态改变,那么该promise状态就跟着变成对应的状态。


箭头函数和普通函数的区别


  • 不绑定this。即使通过显示绑定也不能改变this指向。


  • 无arguments。


  • 不能使用new操作符调用。


  • 不能简单返回对象字面量。需要使用()包裹。


let、var和const的区别?如果希望const定义的对象的属性也不能被修改该怎么做?


  • let,const。具有块级作用域。前者定义变量,后者定义常量。没有声明提升。


  • var不具有块级作用域。具有声明提升。


  • 并且const不可以作为for循环的声明。因为他是将上一次变量的结果复制给下一次。所以不能用const。 可以通过Object.defineProperty设置writerable:false或者freeze


堆和栈的区别


  • 堆:用来保存引用类型的数据。如果存在闭包,他还会将闭包中应用的变量存放在堆中一份。


  • 栈:用来保存基本数据类型,还有对象类型的地址值。


闭包的原理


内部函数访问外部函数的自由变量。自由变量的集合称为闭包。


广义上讲,js函数就是一个闭包 因为可以访问全局变量。


狭义上讲,函数的嵌套才会构成闭包。


网络异常,图片无法展示
|


instanceof的实现原理


function myInstanceof(instance, pro) {
        while(true) {
          if(instance.__proto__ === pro.prototype) {
            return true
          }else if(instance.__proto__ === null){
            return false
          }
          instance = instance.__proto__;
        } 
    }


new的实现原理


// 不能使用class构造函数。因为class定义的只能通过new调用
function MyNew(Constructor, ...arg) {
  // 1.创建一个对象
  const newObj = {}
 // 2.绑定prototype
  newObj.__proto__ = Constructor.prototype
 // 3.改变this指向
  Constructor.call(newObj, ...arg)
 // 4.返回新的对象
  return newObj
}


数据类型有哪些?如何判断一个数据是否是数组。


原始数据类型:number,string,boolean,symbol,bigint,null,undefined。


引用数据类型:Object,Array,RegExp,Date,Function等等。


isArray,instanceof,Object.propertype.toString.call(arr)。


分别介绍一下原型、原型链、作用域和作用域链的含义和使用场景。


原型:每个对象都有一个__proto__指向他的原型对象prototype,直到指向null。


原型链:每一个对象的__proto__属性都指向他的原型对象prototype。直到指向null。


这条链式结构就是原型链。并且对象中获取属性和方法都是通过这个指向来查找的。es5类的继承。


作用域


  • 全局作用域。


  • 函数作用域。


  • 块级作用域。


作用域链。就是变量查找的路径。如果需要获取变量的值,那么他首先在自己的作用域中查找。如果没有,去上一层作用域,直到查到全局作用域。如果没有就报错。请注意,这种作用域链式基于词法作用域的,就是根据变量定义的位置决定的,而不是执行的上下文环境。


那他为什么会知道上层作用域是谁呢?


每个执行上下文中的变量环境中都有一个outer属性指向外部执行上下文。所以就依靠这个指向查找的。并且作用域链是由词法作用域决定的。


css篇


css和js两种方式实现div右移1000px动画


.box {
      width: 100px;
      height: 100px;
      background-color: skyblue;
      animation: animate 1s forwards;
    }
    @keyframes animate {
      0% {
        transform: translate(0, 0);
      }
      100% {
        transform: translate(1000px, 0);
      }
    }


js实现


const box=document.getElementsByClassName("box")[0];
    box.style.width="100px";
    box.style.height="100px";
    box.style.backgroundColor="red"
    box.style.position="relative";
    box.style.left="0";
    let id=setInterval(() => {
      if(parseInt(box.style.left)==1000) {
        clearInterval(id);
      }
      let left=parseInt(box.style.left);
      box.style.left=left+10+"px";
    },10)


visibility、display、opacity的区别


三者都可以隐藏元素。


  • opacity: 0。元素不可见,但是还会占据空间,而且,需要注意,此时给它绑定事件,它会触发


  • display: none。直接把元素隐藏了,不占据任何空间,也不响应任何事件。


  • visibility:hidden,元素不可见,但是还会占据空间,虽然它占据空间,但是如果给它绑定事件,它也不会触发


单行截断css


这个就是为文本添加省略号,这个还挺常用。


更多实现,请查看这里。


添加单行省略号


width: 必须;
white-space: nowrap//不让内容折行
overflow: hidden;//溢出隐藏
text-overflow: ellipsis;//添加省略号


添加多行省略号


div {
  display: -webkit-box;
  overflow: hidden;
  -webkit-line-clamp: 2;//最多2行,2行装不下就用...省略
  -webkit-box-orient: vertical;
}


flex布局


flex布局,老生常谈了。基本现在的布局都是用它了。


是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。


容器属性


  • flex-direction:布局排列的方向


  • flex-wrap:是否换行


  • flex-flow:flex-directionflex-wrap 组合。


  • align-items: 侧轴的排列方式。


  • justify-content: 主轴的排列方式


  • align-content: 整个容器在侧轴的排列方式。注意和align-items的区别。align-items只是在当前行的排列,而不是相对于整个容器。


align-contentalign-items区别请查看mdn


项目属性介绍请查看这里


flex:1


flex属性是flex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto


flex: 1 = flex: 1 1 0%
flex: 2 = flex: 2 1 0%
flex: auto = flex: 1 1 auto
flex: none = flex: 0 0 auto,常用于固定尺寸不伸缩


transition、transform、translate的区别


  • transition: 设置过度。


  • transform: 一些变换。平移,旋转,斜切等等。


  • translate: transform一个属性,用于设置x,y方向的平移。


如何画一条 0.5px 的边框


怎么画一条0.5px的边(更新)


说一下BFC


浅析BFC原理及作用


parent元素宽高不定,实现scale固定宽高比始终为4:3


这个不知道什么意思???希望可以在评论区留言。


CSS垂直居中的方案


CSS垂直居中的12种实现方式


伪元素和伪类的区别


总结伪类与伪元素 | AlloyTeam


position的几个属性和含义


CSS position 属性


我自己也总结了一篇文章


说一下盒模型


一个元素,最终显示在页面上,都是一个类似于盒子一样的。具有margin, padding, content, border值。


盒子模型分为两种,一个是正常的盒子模型,一类是怪异盒子模型。


  • box-sizing: content-box。他设置的宽度就只是包括content。


  • box-sizing: border-box。他设置的宽度包括padding + border + content。 这里需要注意一下。当子元素未设置宽度时,他的宽度和父元素的一样。并且添加margin, padding, border都不会增大元素总宽度,只会减少content来使宽度不变。双飞翼布局就利用了这一点。


响应式布局方案


前端响应式布局原理与方案(详细版)


三栏式布局方案


  • flex布局


  • 双飞翼布局。


  • 圣杯布局。 双飞翼和圣杯都是通过设置浮动,并且将中间内容放在前面展示。这样做的好处之一是在网络不好的情况下,让中间的内容先展示。


二者的区别就是如何让中间元素的内容不被两边布局的容器遮住。


  • 双飞翼布局是在外层包裹一个div元素,让其宽度为100%,然后由于盒子模型的特性,内部元素设置margin后,会自动将剩余空间分配给内部元素作为宽度。


  • 圣杯布局直接设置padding值,将内容挤出覆盖的部分。但是需要社会中ie的怪异盒子模型。box-sizing: border-box


如何提高动画的渲染性能


这样使用GPU动画


xdm,一起加油啊。正确进大厂。


相关文章
|
8天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
35 13
|
1月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
26 1
JavaScript中的原型 保姆级文章一文搞懂
|
17天前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
33 3
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
38 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
1月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
1月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
135 1
|
1月前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
48 3
|
29天前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
18 0