CSS面试题:加一Q一带一你10319281邀一情一玛33339333进【c9183.com】已助上千人成功翻盘,欢迎增加,沟通交流!
1、谈谈你对CSS盒模型的意识?

1、基本概念:规范模型+IE模型
CSS盒模型实质上是一个盒子,封装四周的HTML元素,它包含:内边距(padding),边框(border),margin(外边距),和内容(content)。
规范盒模型:一个块的总宽度=width+margin(左右)+padding(左右)+border(左右)
怪异(IE)盒模型:一个块的总宽度=width+margin(左右)(既width曾经蕴含了padding和border值)
设置盒模型:box-sizing:border-box

2、CSS是如何设置这两种模型,那么二者怎么转化呢?

content-box: 指的是W3C规范盒模型,也是默认的设置属性。
border-box:指的是IE盒模型,width和height蕴含了padding和border。

3、JS如何获取盒模型对应的宽和高?

dom.style.width/height:对节点款式可读可写,但只能读或写内嵌的CSS款式对于在(style)或外联款式不能读写。
dom.currentStyle.width/height:拿到的是渲染之后的宽和高,比拟实在,但反对IE浏览器
window.getComputedStyle(dom).width/height:办法是只读的,只能获取款式,不能设置。
dom.getBoundingClientRect().width/height:getBoundingClientRect()办法失去8个值,除了 width 和 height 外的属性x、y、left、top、right和bottom都是绝对于视口(viewport)的左上角地位而言的。

4、什么是BFC?BFC的原理?

块级格式化上下文。是一种边距重叠解决方案。
利用场景: 1. 解决margin叠加的问题

  1. 用于布局(overflow: hidden)

3.BFC不会与浮动盒子叠加。

  1. 用于革除浮动,计算BFC高度。

5、行内元素和块级元素有什么区别?

块级元素:显示在一块内,会主动换行,元素会从上到下垂直排列,各自占一行,块级元素能够设置宽高,如p,ul,form,div,(h1-h6)等标签元素
行内元素:元素在一行内程度排列,高度由元素的内容决定,行内元素不能够设置宽高,如a,br,span,input等元素。

6、行内元素和块级元素如何转换?

行变块display:block
块变行display:inline
display:inline-block(能够在同一行内显示)。

7、什么是伪类选择器和伪元素?列举3个CSS3中引入的伪类选择器和伪元素!

伪类用一个冒号来示意,而伪元素则用两个冒号来示意。
伪元素选择器:dom中不存在的元素,仅仅是css中用来渲染,增加一些特殊效果的,比方p::before,抉择p标签(真元素)后面的假元素(伪元素,p标签后面没有元素,只是假如有)
::first-line抉择元素的第一行,比如说扭转每个段落的第一行文本的款式
::before::after这两个次要用来给元素的后面或前面插入内容,这两个罕用"content"配合应用,见过最多的就是革除浮动
::selection用来扭转浏览网页选中文的默认成果

伪类选择器:一个概念上的类,不是咱们定义的,是形象的。如a:hover,抉择a标签(元素选择器)中具备鼠标悬停类的所有元素,这个类是形象的,不是咱们本人定义的,再如first-child,抉择第一个,抉择具备这个类性质的所有元素,“第一个”,这个类就形象了,咱们没必要定义一个第一个这样的类
列举::root()选择器,根选择器,匹配元素E所在文档的根元素。在HTML文档中,根元素始终是(html)。:root选择器等同于(html)元素。
:not()选择器称为否定选择器,和jQuery中的:not选择器截然不同,能够抉择除某个元素之外的所有元素。
:empty()选择器示意的就是空。用来抉择没有任何内容的元素,这里没有内容指的是一点内容都没有,哪怕是一个空格。

8、px和em,rem的区别?

px 实际上就是像素,用PX设置字体大小时,比较稳定和准确。px是固定长度单位,不随其它元素的变动而变动
em 就是依据基准来缩放字体的大小。em 是绝对长度单位。em是绝对于父级元素的单位,会随父级元素的属性(font-size或其它属性)变动而变动
rem是CSS3新增的一个绝对单位,rem是绝对于根目录(HTML元素)的,所有它会随HTML元素的属性(font-size)变动而变动
例如: ==屏幕宽度/设计宽度 = 1rem的值/预设定rem的值。
1920/1920=100/100 ;
所以 1rem=1920/1920*100 ;
document.documentElement 是html节点
document.documentElement.style.fontSize = ((windowWidth / designWidth) * rem2px) + 'px';
如果,用户将屏幕拖小了,变为960。1rem将主动变为50px;960/1920乘以100=50
这里须要判断下,当屏幕的宽度大于设计稿定义的宽度,用设计稿的宽度,如果小于,用屏幕宽度作为变量屏幕宽度。

10、对于相对定位,绝对定位和固定定位

1、绝对定位不脱离规范流,在页面中占地位 。
绝对于本人原来的地位来进行定位 。
2、相对定位脱离规范流,在页面中不占地位。
如果没有父元素,则绝对于body定位;如果有父元素,但父元素没有定位,那么还是绝对于body定位;如果父元素有定位,那么绝对于父元素来定位。
3、固定定位:绝对于浏览器窗口进行定位
绝对定位:position: relative;
相对定位:position: absolute;

11、CSS 选择符有哪些?哪些属性能够继承?优先级算法如何计算? CSS3新增伪类有那些?

CSS 选择符:
1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul > li)
6.后辈选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = “external”])
9.伪类选择器(a: hover, li:nth-child)

1.2 能够继承的属性:
可继承的款式: font-size font-family color, UL LI DL DD DT;
不可继承的款式:border padding margin width height ;

优先级: !important > id > class > tag
important 比 内联优先级高,但内联比 id 要高

CSS3新增伪类举例:
p:first-of-type 抉择属于其父元素的首个 <p> 元素的每个 <p> 元素。
p:last-of-type 抉择属于其父元素的最初 <p> 元素的每个<p> 元素。
p:only-of-type 抉择属于其父元素惟一的<p> 元素的每个<p> 元素。
p:only-child 抉择属于其父元素的惟一子元素的每个<p> 元素。
p:nth-child(2) 抉择属于其父元素的第二个子元素的每个<p> 元素。
:enabled :disabled 管制表单控件的禁用状态。
:checked 单选框或复选框被选中。

12、以下是CSS3的几种罕用前缀

-webkit
-moz
-ms
-o

13、CSS3新增的伪类有哪些

p:last-of-type 抉择属于其父元素的最初 <p> 元素的每个 <p> 元素。
p:only-of-type 抉择属于其父元素惟一的<p> 元素的每个 <p> 元素。
p:only-child 抉择属于其父元素的惟一子元素的每个 <p> 元素。
p:nth-child(2) 抉择属于其父元素的第二个子元素的每个 <p> 元素。
:enabled、:disabled 管制表单控件的禁用状态。
p:first-of-type 抉择属于其父元素的首个 <p> 元素的每个 <p> 元素。
:checked,单选框或复选框被选中。

14、CSS3有哪些新个性?

  1. CSS3实现圆角(border-radius),暗影(box-shadow)
  2. 对文字加特效(text-shadow),线性突变(gradient),旋转(transform)
  3. transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,歪斜
  4. 减少了更多的CSS选择器 多背景 rgba
  5. 在CSS3中惟一引入的伪类是 ::selection.
  6. 媒体查问,多栏布局
  7. border-image

15、为什么要初始化CSS款式。

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会呈现浏览器之间的页面显示差别。当然,初始化款式会对SEO有肯定的影响,但求影响最小的状况下初始化。

16、解释下浮动和它的工作原理?革除浮动的技巧

因为浮动元素不再占用原文档流的地位,所以它会对前面的元素排版产生影响,革除浮动的实质:次要为了解决父级元素因为子级浮动引起外部高度为0的问题。

  1. 应用空标签革除浮动。
    这种办法是在所有浮动标签前面增加一个空标签 定义css clear:both. 弊病就是减少了无意义标签。
  2. 应用overflow。
    给蕴含浮动元素的父标签增加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
  3. 应用after伪对象革除浮动。
    该办法只实用于非IE浏览器。
    一、该办法中必须为须要革除浮动元素的伪对象中设置 height:0,否则该元素会比理论高出若干像素;
    能够给父元素设置overflow:auto或者hidden

JS的面试问题:

0、如何判断一个变量是对象还是数组?

1、咱们可能应用typeof判断变量的身份,判断字符串失去string,数字和NaN失去number,函数会失去function等,然而判断数组,对象和null时都会失去object,这就是typeof的局限性,
2、应用instanceof(比拟运算符)能够用来判断一个变量是数组还是对象
3、constructor(构造函数)
4、Object.prototype.toString.call()
总结:判断简略数据类型能够用typeof,判断数组,对象应用instanceofconstructorObject.prototype.toString.call(),最好应用Object.prototype.toString.call(),更加精准

1.闭包

闭包就是可能读取其余函数外部变量的函数。
内部函数调用之后其变量对象本应该被销毁,但闭包的存在使咱们依然能够拜访内部函数的变量对象
创立闭包最常见形式,就是在一个函数外部创立另一个函数。
闭包的毛病:滥用闭包函数会造成内存泄露,因为闭包中援用到的包裹函数中定义的变量都永远不会被开释
在退出函数之前,将不应用的局部变量全副删除。能够使变量赋值为null;

2.数据类型

根本数据类型:String( 字符串),Boolean(布尔),number(数值),Null(空值),undefined(未定义)
援用数据类型:Object(Array,Date,RegExp,Function)

3.javascript 中 == 和 === 的区别是什么?举例说明。

===会主动进行类型转换,==不会

4.请尽可能详尽的解释 ajax 的工作原理

思路:先解释异步,再解释 ajax 如何应用
Ajax 的原理简略来说通过 XmlHttpRequest 对象来向服务器发异步申请,从服务器取得数据,而后用JS来操作DOM而更新页面。XMLHttpRequest 是 ajax 的外围机制,它是在 IE5 中首先引入的,是一种反对异步申请的技术。简略的说,也就是 javascript 能够及时向服务器提出申请和解决响应,而不阻塞用户。达到无刷新的成果。
特点:Ajax 能够实现异步通信成果,实现页面部分刷新,带来更好的用户体验;按需获取数据,节约带宽资源

ajax是什么?

  1. 通过异步模式,晋升了用户体验
  2. 优化了浏览器和服务器之间的传输,缩小不必要的数据往返,缩小了带宽占用
  3. Ajax 在客户端运行,承当了一部分原本由服务器承当的工作,缩小了大用户量下的服务器负载。

Ajax 的毛病:

  1. Ajax 不反对浏览器 back 按钮
  2. 平安问题 Ajax 裸露了与服务器交互的细节
  3. 对搜索引擎的反对比拟弱
  4. 毁坏了程序的异样机制
  5. 不容易调试

HTTP协定类型题目:

  1. HTTP 状态音讯
200:申请已胜利,申请所心愿的响应头或数据体将随此响应返回。
302:申请的资源长期从不同的 URI 响应申请。因为这样的重定向是长期的,客户端该当
持续向原有地址发送当前的申请。只有在Cache-Control或 Expires中进行了指定的状况下,
这个响应才是可缓存的
304:如果客户端发送了一个带条件的 GET 申请且该申请已被容许,而文档的内容(自上
次访问以来或者依据申请的条件)并没有扭转,则服务器该当返回这个状态码。304 响应禁
止蕴含音讯体,因而始终以音讯头后的第一个空行结尾。
403:服务器曾经了解申请,然而拒绝执行它。
404:申请失败,申请所心愿失去的资源未被在服务器上发现。
500:服务器遇到了一个未曾意料的情况,导致了它无奈实现对申请的解决。一般来说,这个问题都会在服务器端的源代码呈现谬误时呈现。

6.说一下什么是Http协定

对客户端和服务器端之间数据传输的格局标准,格局简称为“超文本传输协定”

7.什么是Http协定无状态协定?怎么解决Http协定无状态协定?

(1)、无状态协定对于事务处理没有记忆能力。短少状态意味着如果后续解决须要后面的信息
(2)、无状态协定解决办法: 通过1、Cookie 2、通过Session会话保留。

8.Http协定中有哪些申请形式?

GET:用于申请拜访曾经被URI(对立资源标识符)辨认的资源,能够通过URL传参给服务器,从指定的资源申请数据
POST:用于传输信息给服务器, 向指定的资源提交要解决的数据
PUT:传输文件,报文主体中蕴含文件内容,保留到对应URI地位
HEAD:取得报文首部,与GET办法相似,只是不返回报文主体,个别用于验证URI是否无效
DELETE:删除文件,与PUT办法相同,删除对应URI地位的文件
OPTIONS:查问响应URI反对的HTTP办法

区别:

Get 是通过地址栏来传值,而 Post 是通过提交表单来传值。

9.Http协定由什么组成?

申请报文包含三局部:
(1).申请行:蕴含申请办法,URI,HTTP版本协定 (2).申请首部字段 (3).申请内容实体
响应报文蕴含三局部:
(1).状态行:蕴含HTTP版本,状态码,状态码起因短语 (2).响应首部字段 (3).响应内容实体

10.HTTP协定的工作原理?

HTTPS在传输数据之前须要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立单方加密传输数据的明码信息,通常状况下会配合数字证书实现。

13.ajax的同步和异步区别:

  1. 同步:提交申请 -> 期待服务器解决 -> 处理完毕返回,这个期间客户端浏览器不能干任何事
  2. 异步:申请通过事件触发 -> 服务器解决(这是浏览器依然能够作其余事件)-> 处理完毕
    ajax.open办法中,第3个参数是设同步或者异步。

14.跨域? ?

了解跨域的概念:协定、域名、端口都雷同才同域,否则都是跨域

14-1、什么状况下会碰到跨域问题?有哪些解决办法?

跨域是指a页面想获取b页面资源,如果a、b页面的协定、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的拜访口头都是跨域的,而浏览器为了平安问题个别都限度了跨域拜访,也就是不容许跨域申请资源。
解决办法:1. JSONP办法:JSONP是服务器与客户端跨源通信的罕用办法,Jsonp 须要指标服务器配合一个callback函数网页通过增加一个(script)元素,向服务器申请JSON数据,这种做法不受同源政策限度;服务器收到申请后,将数据放在一个指定名字的回调函数里传回来。
首先,网页动静插入(script)元素,由它向跨源网址发出请求。
2.通过批改document.domain来跨子域
3.应用window.name来进行跨域
4.通过CORS解决AJAX跨域

15.简述 ajax 的过程。

  1. 创立 XMLHttpRequest 对象,也就是创立一个异步调用对象
  2. 创立一个新的 HTTP 申请,并指定该 HTTP 申请的办法、URL 及验证信息
  3. 设置响应 HTTP 申请状态变动的函数
  4. 发送 HTTP 申请
  5. 获取异步调用返回的数据
  6. 应用 JavaScript 和 DOM 实现部分刷新

16.axios和ajax的区别

axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样。
简略来说: ajax技术实现了网页的部分数据刷新,axios实现了对ajax的封装。

②axios特色:
1.主动转换JSON数据
2.从 node.js 创立 http 申请
3.反对 Promise API
4.客户端反对避免CSRF
5.提供了一些并发申请的接口
PS:避免CSRF:就是让你的每个申请都带一个从cookie中拿到的key,依据浏览器同源策略,混充的网站是拿不到你cookie中失去key的,这样,后盾就能够轻松分别出这个申请是否是用户在混充网站上的误导输出,从而采取正确的策略

17.JavaScript 链 原型,原型链 ? 有什么特点?

1.原型对象也是一般的对象,是对象一个自带隐式的 proto 属性,原型也有可能有本人的原型,如果一个原型对象的原型不为null 的话,咱们就称之为原型链

  1. 原型链是由一些用来继承和共享属性的对象组成的(无限的)对象链。

3.每一次获取对象中的属性都是一次查问过程,如果在自有属性中找不到就会去原型对象中查找,如果原型对象中还查不到,就回去原型对象的原型中查找,也就是依照原型链查找,直到查找到原型链的顶端,也就是Object的原型。

作用域链:
  个别状况下,变量取值到 创立 这个变量 的函数的作用域中取值。
  然而如果在以后作用域中没有查到值,就会向下级作用域去查,直到查到全局作用域,这么一个查找过程造成的链条就叫做作用域链。

一、作用域
  在 Javascript 中,作用域分为 全局作用域 和 函数作用域
  全局作用域:
    代码在程序的任何中央都能被拜访,window 对象的内置属性都领有全局作用域。
  函数作用域:
    在固定的代码片段能力被拜访

18、JS创建对象有几种办法?

1.new Object()
2.应用字面量
3.工厂模式
4.构造函数模式(constructor)
5.原型模式(prototype)
6.构造函数+原型模式
还是点击上面链接解说的比拟具体吧 ↓
https://www.jianshu.com/p/1fb...

19、虚构dom和实体dom的区别?

DOM的实质:
浏览器概念,浏览器从服务器端读取html页面,浏览器将html解析成一棵元素嵌套关系的dom树,用对象来示意页面上的元素,并提供操作dom对象的api。
虚构DOM:
框架概念,程序员用js对象来模仿页面上dom元素的嵌套关系( 实质 ),为了实现页面元素的高效更新( 目标 )
区别:1、虚构DOM不会进行重排与重绘操作;
2、虚构DOM进行频繁批改,而后一次性比拟并批改实在DOM中须要批改的局部,最初进行重排和重绘,缩小过多DOM节点重排和重绘损耗。
3、虚构DOM无效升高大面积(实在DOM节点)的重排和重绘,因为最终与实在DOM比拟差别,能够部分渲染

20、形容一下事件冒泡机制

当你应用事件冒泡时,子级元素先触发,父级元素后触发,即p先触发,div后触发。

21、请形容一下cookies,sessionStorage和localStorage的区别

cookie(贮存在用户本地终端上的数据)是网站为了标识用户身份而贮存在用户本地终端上的数据,cookie数据始终在同源的http申请中携带,只会在浏览器和服务器间来回传递。另外两个不会主动把数据发给服务器,仅在本地保留。

22、js阻止事件冒泡的两种办法

event.stopPropagation( )
event.target

23、JS的内置对象

24、函数调用的四种形式

函数调用模式
办法调用模式
结构器调用模式
间接调用模式,通过call()和apply()进行

25、JS中常见的几种继承办法

1.原型链继承
原型链实现继承的思维:利用原型让一个援用类型继承另一个援用类型的属性和办法。
原型链的基本概念: 当一个原型对象等于另一个类型的实例,此时的原型对象将蕴含一个指向另一个指向另一个原型的指针。同时,另一个原型中也蕴含着一个指向另一个构造函数的指针。如果另一个原型是另一个类型的实例,此时实例和原型就形成了原型链
原型链存在的问题
1)蕴含援用类型值的原型属性会被所有实例共享,这会导致对一个实例的批改会影响另一个实例。在通过原型来实现继承时,原型实际上会变成另一个类型的实例。原先的实例属性就变成了当初的原型属性
2)在创立子类型的实例时,不能向超类型的构造函数中传递参数

2.构造函数继承(经典继承)
借用构造函数的根本思维,即在子类型构造函数的外部调用超类型构造函数。函数只不过是在特定环境中执行代码的对象,因而通过应用apply()和call()办法能够在新创建的对象上执行构造函数
借用构造函数的劣势:能够在子类型构造函数中向超类型构造函数传递参数
借用构造函数的问题:
1)无奈防止构造函数模式存在的问题,办法都在构造函数中定义,因而无奈复用函数。
2)在超类型的原型中定义的办法,对子类型而言是不可见的。因而这种技术很少独自应用。

3.组合形式继承(构造函数 + 原型链)
组合继承:指的是将原型链和借用构造函数的技术组合到一起。思路是应用原型链实现对原型办法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数的复用,又可能保障每个实例都有它本人的属性。
组合继承的劣势
防止了原型链和借用构造函数的毛病,交融了他们的长处,是JavaScript中最罕用的继承模式。instanceof和isprototypeOf()也可能用于辨认基于组合继承创立的对象

4.es6办法继承

27、JS运行机制

JS为什么是单线程?

  • JS的单线程,与它的用处无关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很简单的同步问题。

JS的运行机制:

  • 因为JavaScript是单线程,意味着工作要一个接着一个实现,然而,如果前一个工作执行工夫很长,那么前面的工作就得始终阻塞着,这样用户体验非常差。
    JavaScript的设计者思考到了这一点,所以他将JavaScript的工作分为两种,在主线程上执行的工作"同步工作",被主线程挂载起来的工作"异步工作",后者个别是放在一个叫工作队列的数据结构中。
    只有当所有同步工作都执行完了才会,开始察看工作队列中被挂载起来的工作,并且依照队列的个性,先进先出的顺次执行。

28、DOM是什么?

DOM是Document Object Model,即文档对象模型,它容许脚本管制Web页面、窗口和文档。

29、DOM事件流(event flow )存在三个阶段:事件捕捉阶段、处于指标阶段、事件冒泡阶段。

事件捕捉(event capturing):艰深的了解就是,当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件流传,即点击了子元素,如果父元素通过事件捕捉形式注册了对应的事件的话,会先触发父元素绑定的事件。
事件冒泡(dubbed bubbling):与事件捕捉恰恰相反,事件冒泡程序是由内到外进行事件流传,直到根节点。
无论是事件捕捉还是事件冒泡,它们都有一个独特的行为,就是事件流传,
dom规范事件流的触发的先后顺序为:先捕捉再冒泡,即当触发dom事件时,会先进行事件捕捉,捕捉到事件源之后通过事件流传进行事件冒泡。

30、数组去重的办法

1.ES6 Set去重
`var arr = [1,2,3,3,2,1,5,1];var arr2 = Array.from(new Set(arr))console.log(arr2)` *   1*   2*   3
`var arr = [1,2,3,3,2,1,5,1];let a = [...new Set(arr)]console.log(a)` *   1*   2*   3
2.利用for嵌套for,而后splice去重
3.利用indexOf去重
`var arr = [1,3,4,5,6,7,4,3,2,4,5,6,7,3,2];function find(){var newArr = [];for (var i = 0; i < arr.length; i++) {if (newArr.indexOf(arr[i]) == -1 ) { //也能够换成if(newArr.indexOf(arr[i])<0)newArr.push(arr[i]);  }}consoloe.log(newArr); // [1, 3, 4, 5, 6, 7, 2]}find(arr); //调用这个办法  indexOf对大小写敏感` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11
4.利用filter
filter(x,index,self)能够为数组提供过滤性能,其中x代表元素,index是与X一起传入元素的索引,而self代表数组自身。
`var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7];var arr2 = arr.filter(function(x, index,self) {return self.indexOf(x)===index;}); console.log(arr2); //[1, 2, 3, 4, 5, 6 ,7]` *   1*   2*   3*   4*   5

32、事件委托

简介:事件委托指的是,不在事件的发生地(间接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素能够监听到子元素上事件的触发,通过判断事件产生元素DOM的类型,来做出不同的响应。
举例:最经典的就是ul和li标签的事件监听,比方咱们在增加事件时候,采纳事件委托机制,不会在li标签上间接增加,而是在ul父元素上增加。
益处:比拟适合动静元素的绑定,新增加的子元素也会有监听函数,也能够有事件触发机制。

34、DOM操作——怎么增加、移除、挪动、复制、创立和查找节点。

35、null和undefined的区别?

null是一个示意"无"的对象,转为数值时为0
undefined是一个示意"无"的原始值,转为数值时为NaN
当申明的变量还未被初始化时,变量的默认值为undefined
null用来示意尚未存在的对象,罕用来示意函数希图返回一个不存在的对象
undefined示意 “短少值”,就是此处应该有一个值,然而还没有定义。典型用法是:

  • 1.变量被申明了,但没有赋值时,就等于 undefined

    1. 调用函数时,应该提供的参数没有提供,该参数等于 undefined
    2. 对象没有赋值的属性,该属性的值为 undefined
    3. 函数没有返回值时,默认返回 undefined
  • null示意“没有对象”,即该处不应该有值。典型用法是:

    1. 作为函数的参数,示意该函数的参数不是对象
    2. 作为对象原型链的起点

36、哪些操作会造成内存透露?

内存透露指任何对象在您不再领有或须要它之后依然存在。
垃圾回收器定期扫描对象,并计算援用了每个对象的其余对象的数量。如果一个对象的援用数量为 0(没有其余对象援用过该对象),或对该对象的惟一援用是循环的,那么该对象的内存即可回收。

  • setTimeout 的第一个参数应用字符串而非函数的话,会引发内存透露。
  1. 闭包
  2. 控制台日志
  3. 循环(在两个对象彼此援用且彼此保留时,就会产生一个循环)

37、typeof null返回什么?为什么?

不同的对象在底层都示意为二进制,在javascript中二进制前三位都为0的话会被判断为object类型,
null的二进制示意全0,天然前三位也是0,所以执行typeof时会返回“object”

39、ES6中…运算符能做什么

1.复制数组 2.合并数组 3. 扩大运算符能够与解构赋值联合起来,用于生成数组。 4.扩大运算符还能够将字符串转为真正的数组

42、如何实现浏览器内多个标签页之间的通信?

第一种——调用localStorage
在一个标签页外面应用 localStorage.setItem(key,value)增加(批改、删除)内容;
在另一个标签页外面监听 storage 事件。
即可失去 localstorge 存储的值,实现不同标签页之间的通信。

第二种——调用cookie+setInterval()
将要传递的信息存储在cookie中,每隔肯定工夫读取cookie信息,即可随时获取要传递的信息。

43、数据类型的主动转换和隐式转换你晓得哪些?

隐式类型转换:
1 == ‘1’
‘1’ + 1
‘1’ - 1
显示类型转换
parseInt(str,radix)/parseFloat(str,radix)/Number()转变成数字。
Boolean(param)转变成布尔值
subString()转变成字符串

VUE方面的问题:
1.谈谈你对MVVM开发模式的了解

**Vue是一个 MVVM框架,其各层的对应关系如下:
View层:在Vue中是绑定dom对象的HTML(代表UI视图,负责数据的展现;)
ViewModel层:在Vue中是实例的vm对象 (负责监听 Model 中数据的扭转并且管制视图的更新,解决用户交互操作;)
Model层:在Vue中是data、computed、methods等中的数据(代表数据模型,数据和业务逻辑都在Model层中定义;)
在 Model 层的数据变动时,View层会在ViewModel的作用下,实现自动更新**

2、Vue的响应式原理?

Vue响应式底层实现办法是 Object.defineProperty() 办法,该办法中存在一个getter和setter的可选项,能够对属性值的获取和设置造成影响
Vue中编写了一个wather来解决数据,在应用getter办法时,总会告诉wather实例对view层渲染页面,同样的,在应用setter办法时,总会在变更值的同时,告诉wather实例对view层进行更新

3、Vue的生命周期

1.beforeCreate --创立前
触发的行为:vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
在此阶段能够做的事件:加loading事件
2.created --创立后
触发的行为:vue实例的数据对象data有了,$el还没有
在此阶段能够做的事件:解决loading,申请ajax数据为mounted渲染做筹备
3.beforeMount --渲染前
触发的行为:vue实例的$el和data都初始化了,但还是虚构的dom节点,具体的data.filter还未替换
在此阶段能够做的事件:。。。
4.mounted --渲染后
触发的行为:vue实例挂载实现,data.filter胜利渲染
在此阶段能够做的事件:配合路由钩子应用
5.beforeUpdate --更新前
触发的行为:data更新时触发
在此阶段能够做的事件:。。。
6.updated —更新后
触发的行为:data更新时触发
在此阶段能够做的事件:数据更新时,做一些解决(此处也能够用watch进行观测)
7.beforeDestroy —销毁前
触发的行为:组件销毁时触发
在此阶段能够做的事件:可向用户询问是否销毁
8.destroyed —销毁后
触发的行为:组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点仍旧存在
在此阶段能够做的事件:组件销毁时进行提醒

4、请具体说下你对vue生命周期的了解?

答:总共分为8个阶段:创立前 / 后,载入前 / 后,更新前 / 后,销毁前 / 后。
创立前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚构的dom节点,data.message还未替换。在mounted阶段,vue实例挂载实现,data.message胜利渲染。
更新前/后:当data变动时,会触发beforeUpdateupdated办法。
销毁前/后:在执行destroy办法后,对data的扭转不会再触发周期函数,阐明此时vue实例曾经解除了事件监听以及和dom的绑定,然而dom构造仍然存在

5、vue生命周期在实在场景下的业务利用

created: 进行ajax申请异步数据的获取、初始化数据
mounted: 挂载元素内dom节点的获取
nextTick: 针对繁多事件更新数据后立刻操作dom
updated: 任何数据的更新,如果要做对立的业务逻辑解决
watch: 监听具体数据变动,并做相应的解决

7、Vue中双向数据绑定是如何实现的?

Vue在组件和实例初始化的时候,会将data里的数据进行数据劫持(object.definepropty对数据做解决)。被解除过后的数据会有两个属性:一个叫getter,一个叫setter
getter是应用数据的时候触发,setter是在批改数据的时候触发,批改数据的时候触发setter,同时也触发了底层的watcher(能够收到属性的变动告诉并执行相应的函数,从而更新视图。)监听,告诉dom批改刷新。

8、父组件与子组件传值

父向子传值:属性传值,父组件通过给子组件标签上定义属性,子组件通过props办法接收数据;
子向父传值:事件传值,子组件通过$emit(‘自定义事件名’,值),父组件通过子组件上的@自定义事件名=“函数”接管 ($emit办法传递参数)

10、 如何让css只在以后组件中起作用

将以后组件的 (style)批改为(styple scoped)

11、第一次加载页面会触发哪几个钩子

第一次加载会触发 beforeCreatecreatedbeforeMountmounted四个钩子

12、Vuex是什么?

Vuex是专门为Vue服务,用于治理页面的数据状态、提供对立数据操作的生态系统
vuex:是vue提供的状态管理工具,简略解释就是vue各个组件间接的变量是不能间接共享的,组件间接的参数传递才多层的时候变得异样简单,所以就诞生了vuex的状态管理工具,保障了状态的对立和可追踪
①:这个状态自治理利用蕴含以下几个局部:
state,驱动利用的数据源;
view,以申明形式将 state 映射到视图;
actions,响应在 view 上的用户输出导致的状态变动。
②:应用vuex治理数据的益处:
可能在vuex中集中管理共享的数据,便于开发和前期进行保护
可能高效的实现组件之间的数据共享,进步开发效率
存储在vuex中的数据是响应式的,当数据放生扭转时,页面中的数据会同步更新
③:vuex中的数据和data中的数据与什么区别?
vuex中的数据是全局的,共享的,data中的数据是公有的
vuex中的数据是响应式的,只有vuex中的数据产生扭转,援用vuex中的数据的文件会同步更新
vuex中的数据是单向的,想要批改vuex中的数据必须在mutation中批改

13、router是什么?

1.routerthis.$router 是路由【导航对象】,用它 能够不便的 应用 JS 代码,实现路由的 后退、后退、 跳转到新的 URL 地址
2.routes:指创立vue-router路由实例的配置项。用来配置多个route路由对象
3.routethis.$route 是路由【参数对象】,所有路由中的参数, params, query 都属于它

14、vue单页面利用及优缺点

vue外围是一个响应的数据绑定零碎,mvvm,数据驱动,组件化,轻量,简洁,高效,疾速,模块敌对。
毛病:不反对低版本浏览器,最低到IE9,不利于SEO的优化,首页加载工夫较长,不能够应用浏览器的导航按钮须要自行实现后退后退。

15、vue生命周期的作用是什么?

它的生命周期中有多个事件钩子,让咱们在管制整个Vue实例的过程时更容易造成好的逻辑。

16、vue.nextTick()的用途?

nextTick能够使咱们在下次DOM更新循环完结之后执行提早回调,用于取得更新后的DOM。

18、兄弟组件之间如何传值?

能够用过一个vue实例Bus作为媒介,要互相通信的兄弟组件之中,都引入Bus,之后通过别离调用Bus事件触发e m i t 和 监 听 emit和监听emit和监听on来实现组件之间的通信和参数传递,相似window的全局自定义事件。相似与子传父,只不过是利用一个新的vue示例作为媒介,而不是以后vue示例(this)

19、jquery和vue的管制DOM元素的次要区别是什么?

jquery操作的是间接dom元素。vue操作的是dom元素对象。
vue.js劣势是(视图-模型)双向绑定,简化了dom的操作(不必重写大量的html标签),进步dom的复用率(以起码代码实现更多的性能),偏向于数据读写,尽管看上去应用比拟繁琐,然而利于前期的保护。
jquery劣势是jquery语义化,容易了解,比较简单,可拓展的插件多。
总结:如果dom操作频繁,不须要动画成果,就应用vue.js。如果dom操作不频繁,但又须要简单的动画成果,就应用jquery. vue.js比拟适宜于后盾治理页面,jquery比拟适宜于前台用户交互页面。

20、vue2模版template的四种写法?

1.写在结构器里的:
2.写在(template)标签里
3.写在(script type=“x-template”)标签里

21、var let const申明的变量的区别

let不容许在雷同作用域内,反复申明同一个变量。let申明的变量只在其所在代码块内无效
const是定义常量的,而且定义一次当前不能再进行更改, 否者会报错;
应用const定义的常量, 领有let一样的个性(无申明提前, 有块状作用域, 反复申明)

  • let: 申明的变量只在它所在的代码块无效; 须要先申明而后再应用,否则报错
  • var:* 申明的变量在全局范畴内都无效;
  • var定义的变量能够批改,如果不初始化会输入undefined,不会报错
  • const: * 申明一个只读的常量,一旦申明,常量的值就不容许扭转;
  • 一旦申明了变量,就必须初始化,不能留到当前赋值;
  • 只在申明所在的块级作用域内无效;

22、如何了解JSON?

JSON是一种轻量级的数据交换格局,作用:通常用于服务端向页面传输数据。
JSON 是 一个 JS 对象,有 2 个 API
JSON.stringify() 办法用于将 JavaScript 值转换为 JSON 字符串。
JSON.parse() 办法用于将一个 JSON 字符串转换为对象。

23、函数申明和函数表达式的区别(作用域)

1.以函数申明的办法定义的函数,函数名是必须的,而函数表达式的函数名是可选的.
2.以函数申明的办法定义的函数,函数能够在函数申明之前调用,而函数表达式的函数只能在申明之后调用.
3.以函数申明的办法定义的函数并不是真正的申明,它们仅仅能够呈现在全局中,或者嵌套在其余的函数中,然而它们不能呈现在循环,条件或者try/catch/finally中,而函数表达式能够在任何中央申明.

24、对于动静路由

不能传递参数的是动态路由,能够传递参数,然而其对应的路由数量是不确定的,叫动静路由
在参数名后面加上:,而后将参数写在路由的path内
这是无参数跳转

query和params两者都能够传递参数,区别是什么?
1.query 传参配置的是path,而params传参配置的是name,在params中配置path有效
2.query在路由配置不须要设置参数,而params必须设置
3.query传递的参数会显示在地址栏中
4.params传参刷新会有效,然而query会保留传递过去的值,刷新不变

25、vue是什么?跟JS有什么区别?

vue就是一个js库,并且无依赖别的js库,跟jquery差不多。vue的外围库只关注视图层,非常容易与其它库或已有我的项目整合。Vue.js是一个笨重、高性能、可组件化的MVVM库,同时领有非常容易上手的API。
区别:在传统web开发中,咱们搭建我的项目都以html构造为根底,而后通过jquery或者js来增加各种特效性能,须要去选中每一个元素进行命令,这样太繁琐了
vue的益处:1.数据绑定:vue会依据对应的元素,进行设置元素数据,通过输入框,以及get获取数据等多种形式进行数据的实时绑定,进行网页及利用的数据渲染 。
2.组件式开发:通过vue的模块封装,它能够将一个web开发中设计的各种模块进行拆分,变成独自的组件,而后通过数据绑定,调用对应模版组件,同时传入参数,即可实现对整个我的项目的开发。
一句话概括:用数据绑定的思维,vue能够简略写单个页面,也能够写一个大的前端零碎,也能够做手机app的界面。

26、Vue-CLi是啥?

它是一个vue.js的脚手架工具。说白了就是一个主动帮你生成好我的项目目录,配置好Webpack,以及各种依赖包的工具

27、vue是怎么渲染的?

1.原有模板语法,挂载渲染:就是对应用Vue标签语法的hmtl进行渲染。
2.应用render属性,createElement函数间接渲染:本来无html,通过JavaScript 的齐全编程的能力生成页面。
3.应用render属性,配合组件的template属性,createElement函数渲染
4.应用render属性,配合单文件组件,createElement函数渲染

28、vue罕用的5个事件修饰符
.stop: 阻止事件冒泡;
.prevent: 阻止默认事件;
.capture: 实现捕捉触发事件的机制 ;
.self: 实现只有点击以后元素时候,才会触发事件处理函数 ;
.once: 事件只触发一次;

26、vue-router 有哪几种导航钩子?

第一种:全局导航钩子
第二种:独自路由独享钩子
第三种:组件内的钩子

29、vue-router 路由模式有几种?

Hash: 应用URL的hash值来作为路由。反对所有浏览器。
History: 以来HTML5 History API 和服务器配置。参考官网中HTML5 History模式
Abstract: 反对所有javascript运行模式。如果发现没有浏览器的API,路由会主动强制进入这个模式。

30、Vue组件通信的六种办法

  • 1.父组件向子组件传值: props/$emit
  • 2.子组件向父组件传值(通过事件模式) $ emit/$on
  • 3.vuex
  • 4.$ attrs/$ listeners
    $ attrs:蕴含了父作用域中不被 prop 所辨认 (且获取) 的个性绑定 (class 和 style 除外)。当一个组件没有申明任何 prop 时,这里会蕴含所有父作用域的绑定 (class 和 style 除外),并且能够通过 v-bind="$ attrs" 传入外部组件。通常配合 interitAttrs 选项一起应用。
    $ listeners:蕴含了父作用域中的 (不含 .native 润饰器的) v-on 事件监听器。它能够通过 v-on="$listeners" 传入外部组件
  • 5.provide/inject
  • 6.$parent / $childrenref
    ref:如果在一般的 DOM 元素上应用,援用指向的就是 DOM 元素;如果用在子组件上,援用就指向组件实例
    $parent / $children:拜访父 / 子实例

31、veu中的三要素

响应式:vue如何监听到 data 每个属性变动?
vue的响应式原理:Vue在组件和实例初始化的时候,会将data里的数据进行数据劫持(object.definepropty对数据做解决)。被解除过后的数据会有两个属性:一个叫getter,一个叫setter
getter是应用数据的时候触发,setter是在批改数据的时候触发,批改数据的时候触发setter,同时也触发了底层的watcher(能够收到属性的变动告诉并执行相应的函数,从而更新视图。)监听,告诉dom批改刷新。

模板引擎:vue的模板如何被解析,指令如何解决?
. 实质就是个字符串。模板最终必须转换成JS代码。因为:
. 有逻辑,如(v-if v-for),必须用JS能力实现
. 转换为html渲染页面,必须用JS能力实现
. 因而,模板最重要转化成JS函数(render函数)

渲染:vue 的模板如何被渲染成 html?
模板解析成render函数---->返回JS模仿的虚构DOM构造:模板是一段字符串,模板解析生成render函数,执行render函数返回为vnode,vnode表明了各个节点的层级关系、个性、款式、绑定的事件。
2、 vnode---->html:通过 updateComponent函数调用vm._update()传入vnode,利用基于snabbdom的patch()办法革新的生成实在DOM节点并渲染页面。

32、v-if跟v-show的区别

v-if是通过管制dom节点的存在与否来管制元素的显隐;v-show是通过设置DOM元素的display款式,block为显示,none为暗藏;
v-if判断是否加载,能够加重服务器的压力,在须要时加载,但有更高的切换开销;
v-show调整DOM元素的CSS的dispaly属性,能够使客户端操作更加晦涩,但有更高的初始渲染开销。
如果须要十分频繁地切换,则应用 v-show 较好;如果在运行时条件很少扭转,则应用 v-if 较好。

33、在ES6中,Promise对象只有三种状态

异步操作“未实现”(pending)
异步操作“已实现”(resolved,又称fulfilled)
异步操作“失败”(rejected)

34、箭头函数和一般函数的区别

,不须要通过function关键字创立函数,并且能够省略return关键字.但函数体内的this对象指的是定义时所在的对象,而不是应用时所在的对象;
①不绑定this,箭头函数的this永远指向其父作用域,任何办法都扭转不了,包含call,apply,bind。
一般函数的this指向调用它的那个对象。
②箭头函数不能作为构造函数,不能应用new
③箭头函数不绑定arguments
④箭头函数通过callapply调用,不会扭转this指向,只会传入参数
⑤箭头函数没有原型属性

35、ES6有哪些新个性

1.模板字符串:模板字符串是为了解决应用+号拼接字符串的不便当而呈现的

2.解析构造
  1. 函数默认参数

4.开展运算符