web前端面试题-javascript(一)

以下题目都是在面试过程中整理的 答案不是标准。如有雷同纯属耦合,可与博主及时联系!

1、常用h5标签以及 h5的优势以及 兼容性问题处理


常用:

--新增input类型 search url email  tel  range number color date time dataTime

--web存储(localStorage sessionStorage)

--表单元素dataList

--表单属性 autocomplete  autofocus  placeholder  requried

--新增h5标签 artical aside details footer header  video audio

优势:

--Video radio减少对外部插件的需求(比如 Flash)

--改善用户体验,比如input里的email url在手机页面里调取键盘时候,

--相对于传统表单类型提供了新的验证方式:js中提供的是 邮箱验证checkValidity();css中提供了 input:valid / input:invalid

--对本地离线存储的更好的支持

--H5完美兼容移动端设备

兼容性问题:

--ie6-8不兼容h5标签: 我们可以引入google的html5.js文件

--移动端click会产生200-300ms的延迟:引入fastclic.js 或者使用zepto的touch事件

--在移动端用position:fixed定位时候如果有定位里要调取键盘,位置会跑偏:不使用 position:fixed 用iscroll

--1像素边框的问题

2、解释一下mvc和mvvm模式?


MVC: 模型-视图-控制器(Model-View-Controller)(Model:模型,数据的拥有者;view:用户界面;controller:负责将view中用户的动作传达给model,将model的数据通过view展现出来;)mvc是单向数据通信model和view永远不能相互通信,只能通过controller传递;controller可以直接读写调用model,model通过notification 和 kvo机制与controller间接通信;controller可以直接与view对话,通过outlet直接操作view,view通过action向controller报告事件的发生,controller是view的直接数据源(数据很可能是controller从model中取得并经过加工了)。Controller是view的代理(delegate),以同步view和controller

  MVVM:model--view--viewModel  模型-视图-视图模型  是mvc的增强版,vue.js  angularjs 都是mvvm框架

【模型】是指后端传递的数据,用纯javascript对象表示;【视图】指的是所看到的页面;【视图模型】是mvvm模式的核心 是连接view 和model的桥梁。

ViewModel有两个方向:一是将模型转化成视图,即将后端传递的数据转化成所看到的页面。实现方式:数据绑定;二是将视图转化成模型,即将所看到的页面转化成后端数据。实现方式:DOM事件监听主要是监听表单元素

这两个方向都实现的,我们称之为数据的双向绑定。

总结:在mvvm的框架下视图和模型是不能直接通信的。它们通过viewModel来通信,viewModel通常要实现一个observer观察者,当数据发生变化,viewModel能够监听到数据的变化,然后通知到对应的视图做自动跟新(单向绑定);而当用户操作视图,viewModel也能监听到视图的变化,然后通知数据做改动,这样就实现了数据的双向绑定。

并且mvvm中的view和viewModel可以相互通信

Vue就是基于mvvm模式实现的一套框架,在vue中:Model:指的是js中的数据,如对象,数组等;View:指的是页面视图;ViewModel:指的是vue实例化对象

3、都用过哪些css3属性?


--Border-radius、box-show阴影、background-size、text-shadow文本阴影、word-wrap自动换行、text-wrap:none不允许换行、text-overflow:clip 文本溢出修剪文本、@font-face

--2D转换:transform(移动:translate、旋转:rotate、缩放:scale、翻转:skew())

--过渡:transition  div{transition:all 2s ease 0 2s} 应用过渡的属性名、过渡花的时间、曲线、延迟(前两项必填)

--动画 用@keyframes创建动画 用animation把动画绑定到某个选择器上

  @keyframes myfirst{ from{background:red}  to{background:yellow}}

  div{animation:myfirst 2s}

--线性渐变

4、浏览器兼容性问题


标签兼容性问题:h5标签不兼容 页面里引入html5.js

都处理过哪些css兼容问题?之前处理兼容到IE几?

--垂直居中:vertical-align:middle 不起作用,设置line-height:

--ie6中块状元素设置浮动,同时又设置margin时,会出现双倍边距的问题 例float:left;width:100px;margin:0 100px;  

解决: 设置display:inline;把块状元素转换为行内元素

--CSS控制透明度问题:一般就直接 opacity: 0.6 ; IE就 filter: alpha(opacity=60)

但在IE6下又有问题,所以又得弄成 filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60);

或者引入DDPngMin.js

--ie6下div高度无法小于10px  给div加overflow:hidden

--表单元素行高不一致 不对其,给其设置float

--在a标签里嵌套img时 某些浏览器中img会有蓝色边框 ;给img加border:0或者border:none

--几个图片放在一起默认有间隙 ;给图片加float:left

--按钮默认大小不一致:直用a标签来模拟按钮添加样式 或者 如果按钮是一张背景图片可以直接给按钮加背景图片

--如果父元素宽度是100%;子元素各为50%,总和会超出100%:给右边浮动的元素添加clear:right;

--鼠标指针cursor:hand 只有ie识别其他浏览器不识别:使用cursor :pointer

--如果给上边元素设置了margin-bottom 给下边元素设置了margin-top 浏览器只会识别较大的:只设置一个

--不同浏览器对于标签默认的padding margin 差异较大 我们设置margin:0; padding:0; 来清除默认样式

--浏览器最小字体是12px;如果想设置更小字体 transform scole 

--给父元素下的几个子元素设置了display:inline-block 子元素之间会有间距,给父元素加font-size:0

5、原生js兼容性问题?


1>、浏览器本身盒子模型client系列和scroll系列都需要写两套

document.documentElement.clientWidth||document.body.clientWidth

document.documentElement.scrollTop||document.body.scrollTop

2>、获取所有浏览器计算过的样式 getComputedStyle

ie6-8不兼容(window下没有这个属性) 用currentStyle

window.getComputedStyle(box,null).height

box.currentStyle.height

3>、通过类名获取元素:getElementsByClassName,在ie6-8下不兼容

我们需要自己封装一个方法兼容所有浏览器

4>、事件

----e=e||window.event

----e.pageX \ e.pageY  ie6-8没有这个属性 我们通过clientY+滚动条卷去的高度来获取

----事件源e.target=e.target||e.scrElement

----阻止浏览器的默认行为 e.preventDefault() 在ie6-8中e.returnValue=false

  e.preventDefault?e.preventDefault():e.returnValue=false

----阻止事件冒泡传播 e.stopPropagation

  e.stopPropagation?e.stopPropagation():e.cancelBubble=true;

5>、事件监听

addEventListener  ie6-8用attachEvent

box.addEventListener(‘click’,fn1,false);

Box.attachEvent(‘onclick’,fn1);

5>、dom节点相关问题 获取元素节点 以下几个ie6-8都不支持 需要用到节点的去处理

nextElementSibling    获取下一个元素节点  nextSibling         

previousElementSibling  获取上一个元素节点  previousSibling

firstElementChild      获取第一个元素节点  firstChild

lastElementChild      获取最后一个元素节点lastChild

6、跨域有几种方法解决?解释jsonp原理


1>、jsonp  (原生方式实现、jquery的ajax、jquery的jsonp插件)

  Jsonp实现原理:引入一个script文件路径是需要调用的跨域的数据地址 将函数名传递给callback,文件载入成功后会执行url中指定的函数,并把我们需要的jsop数据作为参数传递给这个函数

  Jsonp缺点:只支持get请求 不支持 post请求

ajax的jsonp测试

2>、Document.domain+iframe跨域:  Document.domain返回当前文件的域名

只适用于主域相同 子域不同的框架之间的交互,

例如:http://www.domain.com/a.html  http://child.domain.com/b.html

3>、local.hash+iframe跨域

a欲与b跨域相互通信,通过中间页c来实现,三个页面不域之间利用iframe的location.hash传值,相同域之间直接js访问来通信

4>、Window.name  在一个窗口的生命周期内,窗口杂入的所有页面都是共享一个window.name,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的

5>、H5的window.postMessage

6>、跨域资源共享 CORS

7>、nginx代理跨域

8>、nodejs中间代理跨域

9>、webSocket协议跨域

注意:如果是跨域并且是post请求 那么我们使用 CORS 跨域资源共享,但是ie9以及以下支持不是很好我们用window.name来实现

参考文章:

https://segmentfault.com/a/1190000011145364 特别全特别好

https://www.cnblogs.com/itmacy/p/6958181.html  还可以这里有三种

http://caibaojian.com/jquery-ajax-post-cors.html  post跨域 CORS+window.name

7、怎么做响应式布局?


一种:流式布局法(媒体查询):

(pc和手机公用一套时:先做一版和设计稿一样的再调其他手机的)容器和盒子的宽度一般都不写,而是用百分比;其余的样式(字体、padding、margin)都按照设计稿的一半设置;对于有些手机下不是很好看的再用media调整

一种:rem响应式布局法(等比布局)推荐

给html设一个font-size值:100px=1rem; 完全按照设计稿的大小来做,将px换算成rem;      用js来设置不同屏幕下的font-size值;

8、媒体查询都可以设置哪些属性?


Width | min-width | max-width()

Height | min-height| max-height(输出设备渲染区域的高度 即 可视区域)

Device-width | min-device-width | max-device-width (输出设备的宽度)

Device-height| min-device-height | max-device-height(输出设备的高度)

Aspect-ratio | min-aspect-ratio | max-aspect-ratio (目标显示区域的宽高比)

eg:min-aspect-ratio:1/1

Device-Aspect-ratio | min-device-aspect-ratio | max-device-aspect-ratio(设备的宽高比)

Color|min-color|max-color:颜色

Color-index | min-color-index | max-color-index颜色索引

Monochrome|min-monochrome|max-monochrome黑白

Orientation(landscape|portrait)横屏|竖屏

Resolution分辨率

Scan扫描

grid网格

媒体查询最常用的类型:all(适合所有设备);screen(计算机屏幕)默认

9 、不同的移动设备怎么适配?


设置meta标签viewport;给html设一个font-size值:100px=1rem;   完全按照设计稿的大小来做,将px换算成rem;   用js来设置不同屏幕下的font-size值;

10、闭包是什么?优势和缺点各是什么?什么情况下会用到闭包?


在函数执行的时候形成一个私有作用域,保护里边的变量不受外界干扰。外面获取不到也修改不了

嵌套函数更能体现出的特性:当一个函数返回它内部定义的一个函数时,就产生了一个闭包,闭包不但包括被返回的函数,还包括这个函数的定义环境(当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包)。

闭包的用途:

一是实现嵌套的回调函数,

二是实现变量的私有化:js对象没有私有属性,也就是对象的每个属性都是暴露给外部的,这样可能有安全隐患

优势:保护了闭包里的变量不受外界干扰,它是私有的

缺点:闭包使用不当会造成大量内存的堆积

11、优化网站性能


----减少http请求次数(js、css能合并的合并、图片能做成雪碧图的做成雪碧图);

----使用浏览器缓存(根据服务器端的响应header,设置缓存状态;)

----使用离线缓存(把常用的变动少的js、css、图片存储到localstorage,第二次访问的时候直接走本地缓存,在移动端应用广泛)

----使用压缩组件:传输之前,先使用GZIP压缩再传输给客户端,客户端接收之后由浏览器解压

----图片延迟加载:提高网页打开的速度

----将css样式表放在head头部 ((将css放在头部,防止出现白屏,改善用户体验)

----将js脚本放在底部(嵌入的js放在底部,如果放在head里要放在css前边);

将js放在底部 减少页面加载的时间,浏览器在下载js的时候会阻止其他一切活动,比如其他资源的下载,内容的呈现,直到js下载、解析、执行完后才开始css、图片的并行下载,因为js中很可能有代码直接改变了dom树结构比如使用document.write或appendChild,甚至是直接使用location.href进行跳转,浏览器为了防止出现js修改dom树,需要重构dom树,所以就会阻塞其他的下载和呈现;

----使用外部的css、js 可以缓存到本地 下次用户访问时候提高页面加载速度;减少内联的css、js

----精简js:剔除不必要的注释、空白符(换行符、tab缩进、空格),减少文件大小、提高加载速度;可以使用ShrinkSafe来精简JS  http://shrinksafe.dojotoolkit.org/

----精简css:移除空白、注释、0px改成0、颜色使用缩写#fff、样式最后一个的;不写;

----避免使用滤镜,滤镜会增加浏览器内存的开支,最好使用png图片;

可以使用CSS Compressor http://www.cssdrive.com/index.php/main/csscompressor /

----压缩css js 图片

----减少DOM回流和重绘:js脚本频繁的对DOM进行操作会导致页面重绘和回流,避免使用js来修改页面布局,消耗页面性能(例如 数据绑定时候可以用文档碎片(createDocumentFragment)

----标明宽度及高度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。 当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)

----网址后面加斜杠”/”(加了斜杠会减少一次判断过程,直接返回网站设置的存放在网站根目录下的默认页面)

----精简图片、Flash

对大图片、Flash,要在效果和大小之间做出平衡。

----切分组件到多个域

主要的目的是提高页面组件并行下载能力。但不要跨太多域名,建议采用2个子域名。

----使用事件代理

  如果一个div中有10个按钮 不需要给每个按钮加事件绑定,给div加事件绑定就可以了,事件冒泡时可以捕捉到事件,并判断是哪个事件发出的

----减少dom元素的数量

一个复杂的页面意味着需要下载更多数据,同时也意味着JavaScript遍历DOM的效率越慢

--不要出现404错误

--避免使用滤镜

参考网址:

http://www.360doc.cn/article/5054188_179121203.html

https://www.jianshu.com/p/897569276fdf

11、怎样编写高性能的javascript


--手动释放没有用的对象内存 obj=null

--解绑那些不再需要的事件监听器,尤其是那些即将被销毁的DOM对象所绑定的事件监器

--减少对DOM的操作,减少dom的回流和重绘。例如:往页面里绑定dom元素的时候可以使用createDocumentFragment一次性添加到页面里,而不是一条一条的添加

--使用惰性思想,解决每次都要进行判断这个问题;例如:为了兼容标准浏览器和ie浏览器,我们每次都需要对浏览器环境进行一次判断,用惰性思想只需判断一次即可

--变量尽量使用局部变量,避免使用全局变量,函数内的变量函数执行完后就会销毁,而全局变量页面关闭或刷新才会销毁,而且污染全局变量

--处理浏览器兼容性问题的时候,我们尽量避免使用try catch 因为不管当前是浏览器兼不兼容都需要先把try中的代码执行一遍,降低了性能。我们可以判断当前浏览器中是否存在这个属性方法,存在就兼容 不存在就不兼容,或者判断浏览器版本号;常用的是第二种方法

--函数内部不要返回一个未声明的变量,会污染外部变量,会使速度变慢

--在存储数据的时候能使用数组就不使用对象,因为变量对象要比遍历数组快的多,内存方面也高效

--使用对象时的技巧:使用一个构造函数来创建对象。这将确保它创建的全部对象具有同样的隐藏类,并且有助于避免更改这些类,速度也快于Object.create()

--使用模块模式缓存函数,性能要优于原型模式

--使用数组时候,尽量不要删除数组元素,这样改变了数组的索引和解构性能就会变慢,可以把数组最后一项拿过来替换当前项,再删除数组最后一项

--尽量不要使用for-in循环访问数组,建议用for循环 并且将for循环里的ary.leng保存在一个变量里,不然每次都要计算

--获取dom对象要进行缓存,不要每次都去获取

参考网站:https://www.cnblogs.com/yjbjingcha/p/7029057.html

12、jquery中this和$(this)的区别


This表示的是javascript提供的当前对象

$(this)表示的是用jquery封装好的当前对象

13、移动端和pc端有什么区别?


兼容性:pc要考虑的兼容性更多一些;移动用的是webkit内核 需要考虑的兼容性少一些,更多考虑的是不同手机分辨率的适配;

布局:移动端要做到自适应我们用rem布局

动画:pc端对于css3动画不兼容,但在移动端我们要做一些动画、特效用css3简单又高效

框架上:pc用的是jquery;移动用的是zepto,更小一些

事件:移动端多出来的是触屏事件,而缺少hover事件,移动端 弹出手机键盘的处理

操作方式:pc端使用鼠标操作相对单一(左击、右击、双击、滑动)交互效果少;移动端手指操作(点击、滑动、双击、双指放大、双指缩小、五指收缩、苹果最近的3Dtouch按压力度、摇一摇);

屏幕尺寸:移动端设备大,容错性高一些;移动端相对来说屏幕小,操作局限性大,这样在设计上可用的空间尤得珍贵

传感器:移动端的(压力、方向、重力、GPS、NFC、 指纹识别、3Dtouch、陀螺仪)


14、同步和异步的区别


Javascript是单线程的,单线程意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务,所有任务分为两种,一种是同步任务,一种是异步任务

同步:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;

异步:不进入主线程而进入“任务队列”的任务,只有等主线程任务执行完毕,”任务队列“开始通知主线程请求执行任务,该任务才会进入主线程执行

定时器、事件绑定、ajax读取数据的时候一般都设置为异步编程、回调函数


15、es6都用过哪些?


1>、Let变量、const常量 是块级作用域(只对当前函数内部、代码块内容有效)即{}大括号的代码块就是let和const的作用域

2>、模板字符串``反引号 :将表达式嵌入字符串中进行拼接 用${}来界定:`hello ${name}`

const template=`<div> <span>nihaoaaaaa</span></div>`

3>、includes 判断是否包含 然后返回布尔值 str.includes(‘y’)

4>、repeat 获取字符串重复n次 s.repeat(3);获取s字符串并重复3次

5>、函数:为我们提供了默认值:function action(num=300){}

          箭头函数:不需要function 省略return 继承上下文的this

当你有且只有一个参数时候可以省略(),只有一个表达式时候可以省略{} [1,2,3].map(x=>x+1)

6>、键值对重名可简写

7>、使字面量赋值更简洁:

const people={

    name:"liu",

    getName:function(){

        Console.log(this.name)}}

const people={

    name:"liu",

    getName(){

        console.log(this.name)}}

8>、数组和对象不用一个一个的提取:解构

结构

9>、导入import 导出 export

  全部导入:import people from ‘./example’

  将整个模块当作单一对象进行导入:该模块所有导出都会作为对象的属性存在

  Import * as example from “./example.js”

Console.log(example.name)

Console.log(example.age)

Console.log(example.getName())

部分导入

Import {name,age} from ‘./example’

导出默认 有且只有一个默认

export default App

导出部分

Export class App extend Component{}

16、 html语义化的理解?


Html语义化是正确的标签做正确的事情;

有利于搜索引擎优化提高网页权重;便于开发者阅读维护提高效率;清楚的看出网页结构增强可读性;

例如:p是段落;h1-h5是标题;ul、ol是无序列表;nav是导航;header页眉;footer页脚;strong强调;em斜体

17、jquery 和zepto的区别


1>、jquery主要用于pc,zepto主要用于移动端

2>、jquery中提供了很多选择器类型和dom操作方法,但zepto中只是先了部分常用的选择器和方法:eg:jq中的动画方法有(animate、hide、show、toggle、fadeIn、fadeOut、fadeTaggle、slideDown、slideUp、slideToggle),但zepto中只有animate

3>、zepto比jq小的多

4>、zepto的animate动画方法支持了css动画

5>、zepto专门准备了移动端常用的事件操作:tap(点击)、singleTap(单击)、doubleTap(双击)、longTap(长按)、swipe(滑动)、swipeUp、swipeDown、swipeleft、swiperight

18、从地址栏输入url后到页面渲染说一下具体过程?能说多细就说多细(未写完)


域名解析(首先搜索浏览器自身的DNS缓存,看自身缓存中有没有对应的域名,看有没有过期,如果没有 浏览器会找操作系统自身的DNS缓存,如果没有尝试读取host文件);

先向DNS发送一条请求->找到外网的ip和端口号----->再通过外网的ip和端口号找到这台服务器----->找到服务器对应的端口号,服务器接收到请求后把请求页面中的源代码返回给客户端,浏览器接收到源代码后按照w3c规范进行解析并请求html页面中的(css、js、图片)--最后浏览器对页面进行渲染

19、什么是事件冒泡?  什么是事件委托?


事件冒泡:从当前触发的事件目标一级一级往上传递,依次触发,直到document为止

事件委托:利用事件的冒泡机制,将事件委托给更大范围的DOM元素,提高了性能(我们可以给整个页面指定一个onclick事件处理程序,而不必给每个可单击的元素分别添加事件处理程序)

20、js怎样添加、移除、移动、复制、创建和查找节点


(1) 创建新节点

createDocumentFragment() //创建一个DOM片段

createElement()  //创建一个具体的元素

createTextNode() //创建一个文本节点

(2) 添加、移除、替换、插入

appendChild()

removeChild()

replaceChild()

insertBefore()

(3) 查找

getElementsByTagName()

getElementsByName()

getElementById()

(4) 移动节点

   odiv.style.left=parseInt(odiv.style.left)+50+”px”

   <div id=’odiv’ style=’position:absolute;left:10px’></div>

21、您对js原型是如何理解的?您对js继承是如何理解的?举例说明js的继承


This:

This表示当前对象;

如果在全局范围内使用this,这指当前页面对象window;

如果在函数中使用this,函数运行时在什么对象上被调用;

(自执行函数中的this永远是window;给dom元素绑定方法方法执行时里边的this是当前元素;方法执行时看前边有没有点 点前边是谁方法中的this就是谁;类中的this是当前类的实例;call apply bind 对可以改变this关键字一旦遇到他们以前4条都没用)

Prototype:

prototype本质上还是一个javascript对象;每一个函数都有一个默认的prototype属性;如果这个函数被用在创建自定义对象的场景中,我们称为构造函数。

作为类比js中的内部的数据类型 -字符串(String)、数字(Number)、数组(Array)、对象(Object)、日期(Data)都是作为构造函数来实现的

例如数组中的许多方法(concat、join、push)都是在prototype中定义的,如果我们修改了这些类的原型,那些预定义的方法就消失了,但我们可以向其中添加自己的扩展方法(如果用for in方法循环数组里的每一项的时候,扩展的方法也会被循环出来,我们需要这样做arr.hasOwnProperty(i) )

Constructor:

每一个函数都有一个默认的属性prototype,而这个prototype上有一个constructor默认指向这个函数;如果我们重新定义了函数的prototype,那么construction就不再指向这个函数,我们可以在这个函数的原型上扩展方法或者重新覆盖下Person.prototype.constructor=Person;

22 、什么是原型的继承


  1>、原型继承是我们js中常用的一种继承方式;

  2>、子类B想要继承父类A中所有的属性和方法(私有+公有)只需让B.prototype=new A 即可

  3>、原型继承的特点:它是把父类中私有+公有的都继承到了子类的原型上(子类公有)

  核心:原型继承并不是把父类中的属性和方法克隆一份一模一样的给B,而是让B和A之间增加了原型链的链接,以后B的实例n想用A中的getx方法,需要一级一级向上查找


原型继承实例

23、数组5中迭代方法:


every():对数组中每一项执行函数,如果每一项都返回true,则该方法返回true

some():对数组中每一项执行函数,只要有一项返回了true,则该方法返回true

filter():对数组中的每一项执行函数,把里面返回true的项,组成一个数组返回

forEach():对数组中的每一项执行函数。没有返回值。类似于for循环

map():对数组中的每一项执行函数,返回(处理后的)每一项

注:5种方法都不会改变数组本身;函数都接收三个参数(数组中的每一项、每一项的索引值、数组对象本身)

var arr=[1,2,3,4,5];

var res=arr.every(function(i,index,o){ return i>2;});

console.log(res)  //false

24、类数组转化为数组:


Array.prototype.slice.call(arguments);

25 、cookie不设置过期时间,默认过期时间是多少?


关闭浏览器就结束了

26、怎样解析后台返回来的json格式的数据(JSON格式的字符串转化为JSON格式的对象)


JSON 格式的字符串 var str1=’{“name”:”haorooms”,”sex”:”man”}’;

JSON 格式的对象 var str1={“name”:”haorooms”,”sex”:”man”};

JSON 格式的字符串转化成JSON格式的对象

var obj=eval(‘(’+str+’)’);

Var obj=JSON.parse(str);

Var obj=str.parseJSON();//需要引入json.js库

Var obj=$.parseJSON();//jquery里自带的

JSON 格式的对象转化成JSON格式的字符串

Var last=JSON.stringify(obj);

Var last=obj.toJSONString();//需要引入json.js库

27、网络状态码


200或以2开头 代码请求已成功被服务器接收

3xx 系列 用来重定向的 301永久重定向、302临时重定向、304本次读取的内容是读取缓存中的数据

4xx 系列 客户端请求错误 400 客户端传递给服务器的参数出现错误、401无权限访问、404客户端访问的地址不存在

5xx 系列  服务器的错误 500 未知的服务器错误、503服务器已经超负荷

28、用到哪些css插件


Bootstrap、animate.css

29、http请求信息由哪三部分组成


请求方法URI协议/版本、请求头、请求正文

30、清理网站缓存的方法


  meta方法

Jauery Ajax清除浏览器缓存:cache:false 或者 url参数后加随机数或加随机时间

31、数据类型检测的四种方式


  1)、 typeof 返回的是字符串 ”number” , ”boolean” , “string” , “undefined” , “function” , “object” 用途检测参数是否传值 或者检测参数是不是function

      局限性:不能区分数组,对象、正则,因为返回的都是”object”

2)、instanceof 检测一个实例是否属于某个类:

    局限性:只要在当前实例的原型链上,我们检测出来的结果都是true;

            对于基本数据类型,字面量方式无法检测,可以检测出实例创建的方式,只有实例方式创建出来的才是标准的对象数据类型值,也是Number这个类的一个实例

3)、constructor构造函数 可以检测基本数据类型;也可以检测出是数组、正则、对象 (正好解决了instanceof第一个局限 和typeof的局限)

      局限性:如果把类的原型重写 覆盖掉 检测结果就不准确了

4)、Oject.prototype.toString.call()最全的方式

      [object object] 第一个object代表当前实例是对象数据类型,

第二个object代表的是obj所属的类是object

      toString方法:对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前当前类型转换成字符串的类型

      Object.prototype.toString不是用来转换为字符串的

eg:

var arr=["a","b","c"]

console.log(Object.prototype.toString.call(arr)==="[object Array]")  //true

32、js数组主要有哪些方法:


Shift()、unshift()、pop()、push()、concat()、splice(1,5)、slice()、reverse()、sort()

Map /forEach  indexOf /lastIndexOf    toString把数组转换为字符串 

join按照分割符把数组中的每一项拼接成一个字符串

33、左边固定 右边自适应的布局


方法一:左侧设置左浮动,右边设置100%

方法二:flex布局

方法四、左侧绝对定位 右侧margin-left

34、本地存储的方案


1>、传统:

        Cookie:把信息存储到客户端的浏览器中(但是项目服务器端也是可以获取到cookie的)

        Session:把信息存储到服务器上

2>、html5:webstorage

        Localstorage:永久存储到客户端的本地

        SessionStorage:属于临时的会话存储,信息的会话存储,会话窗口存在信息存在,会话窗口关闭信息就消失了。

Cookie和localstorage的区别:

      -----存储内容的大小

      -----兼容性:cookie兼容所有浏览器,localstorage不兼容ie6-8

      ----存储时间限制:cookie存储的内容有时间限制,localstorage是 永久存储到本地

      -----用户可能出于安全的角度禁用cookie(无痕浏览器)但是不能禁止localstorage

    ------应用:cookie用于存储用户名密码,localstorage用于存储js、css源代码

34、手机网站遇到的兼容性问题


1>、网站的头部或者底部使用了positon定位,如果定位区域还要调取键盘的话就会出现很多问题,因为移动端浏览器对手机都支持不好。解决:这个问题就是不用position定位,使用局部滚动isscroll.js

2>、移动端使用click会存在300ms延迟:浏览器在第一次点击结束会,还需要等到300ms看是否触发第二次点击,如果触发了第二次点击就与click事件了。解决:用fastclick.js或者用zepto.js的touch模块

3>、对于非可点元素如(select、span)监听click事件,ios下不会触发,css增加cursor:pointer即可

4>、在ios和andriod中,audio、video元素无法自动播放:给html绑定touchstarch事件

35、manifest离线存储 怎么刷新?


用户清空缓存;manifest文件被修改;由程序来更新

36、webpack是做什么用的?


Webpack是一个模块打包器,

将多种静态资源js、css、less换成一个静态文件,减少了页面请求,

Webpack本身只能处理javascript文件,如果要处理其他类型的文件,就需要使用loader进行转换

37、实现不定高度元素垂直居中的几种方法 其中有个flex


参考网址:https://mobile.tangshuang.net/3197.html

方法一:

Parent{  Position:relative }

Child{ Position:absolute;Top:50%;Transform:translateY(-50%)}

方法二:flex方法

.container { display: flex; align-items: center; justify-content: center;}

<div class="container">  

<div class="inner">

        this is a box fixed in center of screen<br>The second line

</div>

</div>

简单解释一下,当display: flex时,表示该容器内部的元素将按照flex进行布局。align-items: center表示这些元素将相对于本容器水平居中,justify-content: center也是同样的道理垂直居中。对.container赋予了这些样式之后,作为它的内部元素.inner自己自觉的居中了。而且这里你会发现,由于没有使用text-align: center,.inner里面的文字是不会居中的,也就是说仅仅.inner这个容器居中而已。

38、浮动元素垂直居中:


1、(父盒子有宽高)父元素为position:relative  子元素:position:absolute;  top:50%; left:50%;margin-left:-宽度一半

2、(父盒子没有宽高) 父元素为position:relative  子元素:position:absolute;  margin:auto; top:0;left:0;right:0;bottom:0

39、写出你所知道的css选择器


参考网址:https://m.baidu.com/from=1013672b/bd_page_type=1/ssid=0/uid=0/pu=usm%402%2Csz%401320_1004%2Cta%40iphone_2_7.1_11_9.2/baiduid=FF28D2DDA660A06D0F18E70D2FBBBD3F/w=0_10_/t=iphone/l=3/tc?ref=www_iphone&lid=6332165674989771974&order=2&fm=alop&isAtom=1&is_baidu=0&tj=www_normal_2_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&title=CSS%E9%80%89%E6%8B%A9%E5%99%A8%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&dict=32&wd=&eqid=57e05f21d4afdc00100000035bf2318b&w_qd=IlPT2AEptyoA_yi7D6EouwmuJExSm7ooqjwYpePUuAG&tcplug=1&sec=34299&di=4324426a0babbe3e&bdenc=1&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_zcHATm7ok_rxP4kHRhdXHKhVniJEFPwwiPQpsxCg6fcOjpzidYYbu6qgihf

1>、标签选择器:p{list-style:none}

2>、类class选择器 .box{width:100px}

3>、id选择器  #box{width:100px}

4>、通配符选择器(*) *{margin:0}

5>、组合选择器 .box,.header{}

6>、后代选择器 li a{}

7>、子选择器ul > li

8>、伪类选择器:a标签里的hover,active,link,visited

9>、相邻选择器(h1+p)

10>、属性选择器(a[rel="external"])

a[src^=”https”] 选择其src属性值以”https”开头的每个元素

a[src$=”.pdf”] 选择其src属性值以”.pdf”结尾的所有元素

a[src*=”abc”] 选择其src属性中包含”abc”子串的每个元素

哪些属性可以继承?


Font-family、font-size、font-style、color、line-height、list-style、text-indent、text-align...

哪些属性不可继承


Margin  border width height padding background position left right top bottom...

优先级的算法:


用!import可以改变优先级别为最高,其次是style对象,然后是 id>class>tag,另外同级样式按照声明的顺序后出现的顺序具有最高优先级

40、编写一个类和类继承,类名为Person,含有属性 name,age,含有方法sayhello,编写一个Student类,继承自Person,自由属性score,自有方法study


41、什么叫做类数组


类数组是对象数据类型的。

以正整数作为索引,索引逐级递增,索引代表的是当前对应的某一个元素。

还有一个length的属性代表类数组的个数

通过getElementsByTagName getElementByClassName 获取的都是类数组 函数里的arguments

42、字符串的方法 String


1.charAt(索引) 获取指定索引位置的字符  str.charAt(8)

2.subStr(n,m) 从索引开始截取m个

3.SubString(n,m)从索引n开始找到索引为m处(不包含m),把找到的以字符串方式返回

4.slice(n,m) 从索引n开始找到索引为m处(不包含m),把找到的以字符串方式返回 支持负数作为索引

5.indexOf/lastIndexOf    str.indexOf(“!")

6、toLoweCase/toUpperCase

7.replace 替换  str.replace(“liu”,”刘”)  str.replace(“/liu/g”,”刘”) 在不适用正则的情况下只能替换一次

8. split 按照指定字符 分割成数组(例如时间的格式化)

43、获取[n-m]之间的随机整数


Math.round(Math.random()*(m-n)+n)

44、ajax属性jquery


type 请求方式 get post

datatype 服务器返回的数据类型xml html script jsonp json text

contentType 默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。

beforeSend

在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。

45、事件流分为哪几个阶段


捕获阶段:从外向里依次查找元素

目标阶段:当前事件源本身的操作

冒泡阶段:从内到外一次触发相关的行为(我们最常用的就是冒泡阶段)

DOM0级事件只能这些方法在冒泡阶段执行,怎么控制在捕获阶段完成,我们用DOM2级事件

  addEventListener-->第一个参数是行为的类型, 第二个参数是给当前的绑定的方法,第三个参数是控制在哪个阶段发生:true 在捕获阶段发生 false在冒泡阶段发生

  document.body.addEventListener("click",function(){

      console.log("body");

  },false);

46、编写一个复制对象值的方法


参考网址:https://www.cnblogs.com/libin-1/p/6845458.html

复制对象有 浅复制、深复制。

浅复制:没有办法真正复制一个对象,只是保存了该对象的引用地址,一旦原对象的值改变,复制的对象值也会改变

深复制可以实现真正的复制一个对象。

浅复制方法:Es6里Object.assign的第一个参数是目标对象可以是一个或者多个

Let target={a:123};

Let source1={b:456};

Let source2={c:789,d:{e:”lovely”}}

Left obj=Object.assign(target,source1,source2);

Console.log(obj)==>{a:123,b:456,c:789,d:{e:”lovely”}}

Source2.d.e=”hello”;

Console.log(obj)==>{a:123,b:456,c:789,d:{e:”hello”}}//源对象改变,它也改变了

深复制方法:先将对象转换成字符串 再将字符串转换成对象

let source2={c:789,d:{e:"lovely"}}

let obj2=JSON.parse(JSON.stringify(source2));源对象怎么改都不会影响到它

(还可以用递归编写一个方法)

47、box-sizing属性


box-sizing属性包括content-box(default),border-box,padding-box。

     1、content-box,border和padding不计算入width之内

     2、padding-box,padding计算入width内

     3、border-box,border和padding计算入width之内,

48、页面渲染过程 


参考网址:https://m.jb51.net/show/105026

1.解析HTML文件,创建DOM树

自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。

2.解析CSS

优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;

3.将CSS与DOM合并,构建渲染树(renderingtree)

DOM树与HTML一一对应,渲染树会忽略诸如head、display:none的元素

4.布局和绘制,重绘(repaint)和重排(reflow)

重排:若渲染树的一部分更新,且尺寸变化,就会发生重排;

重绘:部分节点需要更新,但不改变其他集合形状。如改变某个元素的颜色,就会发生重绘。

49、Jquery上获取宽度的三个函数 


width()返回元素的宽度

innerWidth()返回元素的宽度 包括内边距

outerWidth()返回元素的宽度 包括内边距和边框

outerWidth(true)返回元素的宽度 包括内边距、边框、外边距

50、Jquery上两种扩展方法


参考网址 https://www.cnblogs.com/gaoyukun/p/8823549.html

$.extend();

  (function(){

$.txtend({

  get:function(name){

Console.log(name);

}

})

})();

调用的时候 $.get(“liu”);  //调用时直接$.函数名(参数);

$.fn.extend();

 (function(){

$.fn.extend({

get:function(name){

Console.log(name);

}

})

})()

$(“button”).get(“liu”);  /调用时要$(标签名).函数名();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容