IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【无标题】 -> 正文阅读

[JavaScript知识库]【无标题】

div居中方法

1、绝对居中

给div设置样式,div默认显示位置为body的左上方。首先给div添加绝对定位,并设置上下左右边距为0,然后使用margin: auto;自动居中。

2、水平垂直居中
给其父元素添加display: flex;弹性布局。
内容对齐(justify-content)属性:应用在弹性容器上,即父元素上。把弹性项沿着弹性容器的主轴线(main axis)对齐,如果横向有多个div,则X轴就为当前弹性容器的主轴线,Y轴为副轴线,反之亦然。

3、(定位+变形)居中

给父元素添加?position: relative;相对定位。

给自身元素添加position: absolute;绝对定位。

怎么实现三列布局(左侧和右侧宽度固定,中间自适应)

  • 绝对定位 + 中间版块不给宽度
  • 两侧浮动 + 中间自动撑开(使用 calc 动态计算宽度,设置对应宽度的 margin)
  • flex,左右设置 flex-basis,中间设置?flex-grow??????

?1-1: flex 具体是怎么实现三列布局的(左侧和右侧的宽度是怎么设置的,中间自适应使用的是哪个属性)

flex 设置宽度和宽度自适应应该算是 flex 的最基本用法,在面试中,问到 flex 的设置宽度和中间自适应具体是哪个属性,

Q 1-2: 设为 flex 属性之后,子元素的哪些属性会失效

float、clear 和?vertical-align

-4: webpack 打包的过程

  • 读取文件,分析模块依赖
  • 对模块进行解析执行(深度遍历)
  • 针对不同的模块使用不同的 loader
  • 编译模块,生成抽象语法树(AST)
  • 遍历 AST,输出 JS

webpack 的 loader 和 plugin 区别,举几个常用的 loader 和 plugin 并说出作用

  • loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS文件! 因为 webpack 本身只能处理 JavaScript,如果要处理其他类型的文件,就需要使用 loader 进行转换,loader 本身就是一个函数,接受源文件为参数,返回转换的结果。
  • Plugin 是用来扩展 Webpack 功能的,通过在构建流程里注入钩子实现,它给 Webpack 带来了很大的灵活性。 通过plugin(插件)webpack可以实 loader 所不能完成的复杂功能,使用 plugin 丰富的自定义 API 以及生命周期事件,可以控制 webpack 打包流程的每个环节,实现对 webpack 的自定义功能扩展。

?模块化解决了前端的哪些痛点

  • 命名冲突
  • 文件依赖
  • 代码复用

三大框架解决了传统 JQ 开发的哪些问题

使前端不用再操纵 DOM,数据驱动,通过数据的改变直接改变 DOM

Q 1-1: Vue2.0 怎么实现双向绑定的

Q 1-2: Vue3.0 怎么实现双向绑定的

?proxy方法 vue .js 是采用 数据 劫持结合发布者 - 订阅者模式的方式,通过new Proxy ()来劫持各个属性的setter,getter,在 数据 变动时发布消息给订阅者,触发相应的监听回调

Q 1-3: Object.defineProperty() 和 proxy 的区别

Proxy 是对整个对象的代理,而 Object.defineProperty 只能代理某个属性。 所以我们在编写响应式函数的时候,defineProperty 需要用for in 去给每个属性添加监听

Q2: 你使用过哪些 Vue/React 全家桶,分别解决了什么问题

vue-cli也叫脚手架1.项目构建工具、2.路由、3.状态管理、4.http 请求工具。

Q3: Vue/React 的 diff 算法

  • react在diff遍历的时候,只对需要修改的节点进行了记录,形成effect list,最后才会根据effect list 进行真实dom的修改,修改时先删除,然后更新与移动,最后插入
  • vue 在遍历的时候就用真实dominsertBefore方法,修改了真实dom,最后做的删除操作
  • react 采用单指针从左向右进行遍历
  • vue采用双指针,从两头向中间进行遍历
  • react的虚拟diff比较简单,vue中做了一些优化处理,相对复杂,但效率更高

Q4: Vue hash 路由和 history 路由的区别

hash模式url带#号,history模式不带#号。

后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问?http://oursite.com/user/id?就会返回 404

Q5: Vue 计算属性和 watch 在什么场景下使用

vuecomputed选项主要用于同步对数据的处理,而watch选项主要用于事件的派发,可异步.

这两者都能达到同样的效果,但是基于它们各自的特点,使用场景会有一些区分.

computed拥有缓存属性,只有当依赖的数据发生变化时,关联的数据才会变化,适用于计算或者格式化数据的场景.

watch监听数据,有关联但是没有依赖,只要某个数据发生变化,就可以处理一些数据或者派发事件并同步/异步执行.

Q6: Vue 的 nexttick 实现的原理

nextTick 是 Vue 提供的一个全局的 API ,由于 Vue 的异步更新策略导致我们对数据的修改不会立马体现到都没变化上,此时如果想要立即获取更新后的 dom 的状态,就需要使用这个方法。 Vue 在更新 dom 时是异步执行的。

通信的要点和目的

要点:1. 发送者和接收者 2. 传输媒介 3. 传输的数据 4. 传输格式(协议)

目的:1. 同步数据 2. 传递指令(执行的方法)

你所接触的前端领域的通讯有哪些

  • 前端和后端
  • 前端和移动端
  • 前端 父页面 和 iframe 之间
  • 浏览器各个 tab 之间
  • web workers 线程通信
  • 路由间的通信
  • vue 父子组件

概述输入一个url到网页呈现的过程

Q 2-1: DNS 解析的详细过程

Q 2-2: 概述 http 的缓存控制(http2 与相关缓存控制)

Q 2-3: 简述三次握手

Q 2-4: 页面加载白屏的原因有哪些,以及如何监控白屏时间,如何优化

Q 2-5:script 标签的属性有哪些

Q 2-6: script 标签的 defer 和 async 标签的作用与区别

Q 2-7: script intergrity的作用

比较 HTML XML XHTML 和 JSON

  • 我们最熟悉的就是 HTML(HyperText Markup Language / 超文本标记语言),用来描述和定义 网络内容的标记语言,超文本的意思是说,除了能标记本文,还能标记 图片,视频,链接 等其他内容
  • XML(Extensible Markup Language / 可扩展标记语言),表现就是给一堆文档加上标签,说明里面的数据是什么意思,方便存储、传输、分享数据。和 HTML 的区别是 HTML 的标签就预定义的,XML 是可扩展的 XHTML: Extensible Hypertext Markup Language / 可扩展超文本标记语,其实就是 HTML 的严格语法形式,约定了 属性名必需小写,空元素必需关闭,元素名小写,属性名必需加引号,布尔类型必需加属性值
  • JSON(Javascript Object Notation)比较轻量级的数据交换格式,由键值对组成,数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小
这个问题确实是一个很基础的计算机先关的问题,但是很多的面试者仍然不能准确的说出 HTML 的含义(超文本标记语言),在说 XML 和 JSON 的区别的时候只能回答出 XML 常用作配置文件,JSON 用于 AJAX 传输数据

eventloop

在一个事件循环中,异步事件返回结果后会被放到一个任务队列中。然而,根据这个异步事件的类型,这个事件实际上会被对应的宏任务队列或者微任务队列中去,当执行栈为空的时候,主线程会首先查看微任务中的事件,如果微任务不是空的那么执行微任务中的事件,如果没有在宏任务中取出最前面的一个事件。把对应的回调加入当前执行栈...如此反复,进入循环。

  • macro-task(宏任务)
    • setTimeout
    • setInterval
    • setImmediate
  • micro-task(微任务)
    • Promise
    • process.nextTick

?自己如何实现一个 promise

  • new Promise(fn) 返回一个promise对象
  • 在fn 中指定异步等处理
    • 处理结果正常的话,调用resolve(处理结果值)
    • 处理结果错误的话,调用reject(Error对象)

一句话概述什么是 promise
Promise对象用于异步操作,它表示一个尚未完成且预计在未来完成的异步操作。

?面向对象三大要素

  • 封装、继承、多态

Q3-1: 能够简单的说明面向对象和面向过程的区别吗

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
  • 面向对象: 狗.吃(屎)
  • 面向过程: 吃.(狗,屎)

Q3-4: 怎么实现封装和继承

Q3-5: 一句话概述什么是闭包

实现给数字添加千分位符的方法

  • 正则表达式:"12345678".replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')
  • 字符串分析, 循环,然后3位加','
  • 数字分析, 取到整数部分, %1000 操作, 然后加逗号 拼接字符串 (12345678).toLocaleString("en-US") => "12,345,678"

JS 数据类型有哪些,其中基本数据类型有哪些

(ES6之前)其中5种为基本类型:string,number,boolean,null,undefined,ES6出来的Symbol也是原始数据类型 ,表示独一无二的值。Object 为引用类型(范围挺大),也包括数组、函数

Q: 1-2 原始数据类型和引用类型的区别

在内存中的存储方式不同,原始数据类型在内存中是栈存储,引用类型是堆存储 栈(stack)为自动分配的内存空间,它由系统自动释放;而堆(heap)则是动态分配的内存,大小不定也不会自动释放。

在内存中存储方式的不同导致了原始数据类型不可变 原始数据类型和引用数据类型做赋值操作一个是传值一个是传址

Q: 1-3 深拷贝 和 浅拷贝 的区别

Q: 1-4 怎么实现浅拷贝

Q: 1-5 怎么实现一个深拷贝

  • JSON.parse() (但是如果里面有 function 和 undefined 不可用)
  • lodash
  • 自己封装

Q: 1-6 null和undefined的差异

相同点:

  • 在 if判断语句中,值都默认为 false
  • 大体上两者都是代表无,具体看差异 差异:
  • null转为数字类型值为0,而undefined转为数字类型为 NaN(Not a Number)
  • undefined是代表调用一个值而该值却没有赋值,这时候默认则为undefined
  • null是一个很特殊的对象,最为常见的一个用法就是作为参数传入(说明该参数不是对象)
  • 设置为null的变量或者对象会被内存收集器回收

?JS数组有哪些常用的方法(push, pop, unshift, splice等

Vuex有用过吗,Vuex的作用,Vuex有哪些常用方法

VueX是用来在Vue项目开发中使用的状态管理工具

用Vue脚手架工具构建好项目;2、利用npm包管理工具安装vuex;3、新建一个store文件夹,并在文件夹下新建“store.js”文件;4、在文件中引入vue和vuex

VueRouter的导航守卫

“导航”表示路由正在发生改变。 正如其名, vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的

9. JS的深浅拷贝的区别,分别实现深浅拷贝 (详见:https://blog.csdn.net/a715167986/article/details/90440794)

10. Promise有用过吗,说说Promise有几个状态,分别是什么意思 (详见:http://es6.ruanyifeng.com/#docs/promise)

?pending、fulfilled、rejected (未决定,履行,拒绝),同一时间只能存在一种状态,且状态一旦改变就不能再变。 promise是一个构造函数,promise对象代表一项有两种可能结果(成功或失败)的任务,它还持有多个回调,出现不同结果时分别发出相应回调。

11. 说说ES6 ES7的一些新特性

变量的改变,添加了块级作用域的概念

let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题

const声明常量(会计作用域)

字符串新增方法

  • 函数可以像C/C++那样设置默认参数值,增加数据容错能力??对象??Set

ES7在ES6的基础上添加三项内容:求幂运算符(**)、Array.prototype.includes()方法、函数作用域中严格模式的变更。

ES8

  • async、await异步解决方案

    提出场景有两个:JS是单线程、优化回调地狱的写法。

字符串填充padStart()、padEnd()

12. JS中0.1 + 0.2 等于几(被问烂了这道题,然而当时笔者答不上来)

浮点数运算中产生误差值

二进制

13. 说说HTTP的几个状态码,各自的含义,304是什么意思?

15. Ajax请求过程叙述

Ajax 是一种异步请求数据的一种技术,对于改善用户的体验和程序的性能很有帮助。

使用ajax发送数据的步骤 第一步:创建异步对象 var xhr = new XMLHttpRequest(); 第二步:设置 请求行 open(请求方式,请求url): // get请求如果有参数就需要在url后面拼接参数,

16. 浏览器在输入url到看到网页发生的过程(很经典常考的一道题)

首先,在浏览器地址栏中 输入url 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中 显示页面 内容。 若没有,则跳到第三步操作。 3、在发送http请求前,需要域名解析 (DNS解析),解析获取相应的IP地址。

17. HTTP1.0 HTTP1.1 HTTP2.0的区别,http和https的区别

18. JS如何实现继承

19. JS数组去重,取交集、并集、差集各自怎么实现

let arr2=[4,5,6,7,8,9]
        // 并集 数组去重 
        let RemoveSame=[...new Set([...arr1,...arr2])]
        console.log(RemoveSame) //[1, 2, 3, 4, 5, 6, 7, 8, 9]

        //数组交集,或得两个数组重复的元素
        let SamePart=arr1.filter(item=>arr2.includes(item))
        console.log(SamePart) //[4, 5, 6]

        //差集=并集-交集  去除两个数组相同的元素
        let Difference=RemoveSame.filter(item=>!SamePart.includes(item))
        console.log(Difference) //[1, 2, 3, 7, 8, 9]

20. 说一说HTML5和CSS3的新特性

  • 新增语义化标??新增多媒体标签??音频:< audio >??视频:< video >??新增input类型 type=" "

  • 新增表单属性???拖放??地理定位

  • css
    新增选择器??边框(Borders)?背景??渐变??文本效果??字体??2D 转换??3D 转换??过渡??动画??

    • 盒模型??伸缩布局盒模型(弹性盒)??多媒体查询?

21. 说一说Vue的Render函数的作用

render函数是vue通过js渲染dom结构的函数createElement,约定可以简写为h 官方文档中是这样的,createElement 是 Vue.js 里面的 函数, 这个函数的作用就是生成一个 VNode节点, render 函数得到这个 VNode 节点之后, 返回给 Vue.js 的 mount 函数,渲染成真实 DOM 节点,并挂载到根节点上。

22. CSS实现圆环效果 (略难)

  • 外层一个大圆(pie),
  • 中间一个小圆(circle),覆盖住大圆,形成圆环
  • 左右各有半圆(left、right),也被中间小圆覆盖,形成左右两个半圆环
  • 左右半圆内有子左右半圆(left-deg,right-deg),用来旋转
  • 在父左右半圆上面设置overflow:hidden,子左右半圆旋转,可实现圆环百分比效果

23. JS let和var的区别

let 可以被修改但是不能被重新声明. 就像 var 一样,用 let 声明的变量可以在其范围内被修改。. 但与 var 不同的是, let 变量无法在其作用域内被重新声明。

25. 说说常用的算法和数据结构

26. 说说快排,快排是稳定的吗?为什么?
快速排序是对冒泡排序算法的一种改进,同冒泡排序一样,快速排序也属于 交换排序 ,通过元素之间的比较和交换位置来达到排序的目的

?算法的稳定性要跟踪代码的执行过程来分析,有些排序算法代码不一样会导致本来稳定的排序变成不稳定。?快排过程是不稳定的,可以给每个元素添加一个原始位置属性使它变稳定。 可以利用额外的nlogn的空间记录每个元素的原始位置,来达到稳定的目的。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:43:13  更:2021-12-13 12:45:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:19:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码