面试题汇总:https://segmentfault.com/a/11...
【总结】:
前++是先自加后计算、后++是后自加先计算
1:前置++ 是将自身+1 后的值赋给变量,同时自身加1;
2:后置++ 是将自身的值赋给变量,之后自身再加1;
Js常用数据类型undefined null boolean number string
Js引用类型object Array function
ES6基本数据类型多了个symblo
1、typeof
检测不出null 和 数组,结果都为object,所以typeof常用于检测基本类型
2、instanceof
不能检测出number、boolean、string、undefined、null、symbol类型,所以instancof常用于检测复杂类型以及级成关系
3、constructor
null、undefined没有construstor方法,因此constructor不能判断undefined和null。但是contructor的指向是可以被改变,所以不安全
4、Object.prototype.toString.call
全类型都可以判断
话不多说,来看第一个例子:
接着看第二个:
slice和splice虽然都是对于数组对象进行截取,但是二者还是存在明显区别,函数参数上slice和splice第一个参数都是截取开始位置,slice第二个参数是截取的结束位置(不包含),而splice第二个参数(表示这个从开始位置截取的长度),slice不会对原数组产生变化,而splice会直接剔除原数组中的截取数据!
slice不会改变原数组,splice会改变原数组
CORS的原理:
当传输数据量比较大,get形式搞不定的时候,可以用到cors跨域,cors原理是定义一种跨域访问的机制,可以让ajax实现跨域访问。Cors允许一个域上的网络应用向另一个域提交跨域ajax请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。
Jsonp是get形式,承载的信息量有限,所以信息量较大的时cors是不二选择。
闭包用途
1缓存
设想我们有一个处理过程很耗时的函数对象,每次调用都会花费很长时间,那么我们就需要将计算出来的值存储起来,当调用这个函数的时候,首先在缓存中查找,如果找不到,则进行计算,然后更新缓存并返回值,如果找到了,直接返回查找到的值即可。闭包正是可以做到这一点,因为它不会释放外部的引用,从而函数内部的值可以得以保留。
2 实现封装
可以先来看一个关于封装的例子,在person之外的地方无法访问其内部的变量,而通过提供闭包的形式来访问:
ie:阻止冒泡ev.cancelBubble = true;非IE ev.stopPropagation();
(1)return false;(2) ev.preventDefault();
事件代理是指,对父盒子绑定事件,然后子盒子触发事件,由于产生事件冒泡,导致父盒子事件也被触发,此时,在父盒子的时间处理函数中,可以通过srcElement或者target属性来获取目标时间,并对其进行相应的处理
“事件捕捉”:是从上往下,window,document,document.documentelment(获取的html) document,body 、……..目标元素
“事件冒泡”:是从下往上:反之
“DOM事件流”:三个阶段:事件捕捉、目标阶段、事件冒泡
Dom事件类:
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
当声明的变量还未被初始化时,变量的默认值为undefined。 null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
相同点:两个方法产生的作用是完全一样的,都是改变this指向的
不同点:方法传递的参数不同
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
Apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
Call()方法的第一个参数与apply()相同,但传递的参数必须列举出来。
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
假设B复制了A,修改A的时候,看B是否发生变化:
如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)
深拷贝实现:
回流(重排):
当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建render tree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程成为重绘。
重绘:
当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。
区别:
回流必将引起重绘,而重绘不一定会引起回流。比如:只有颜色改变的时候就只会发生重绘而不会引起回流
当页面布局和几何属性改变时就需要回流
比如:添加或者删除可见的DOM元素,元素位置改变,元素尺寸改变——边距、填充、边框、宽度和高度,内容改变。
在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove keyup 等等,但有些时候我们并不希望在事件持续触发的过程中那么频繁地去执行函数。
则封装后的防抖函数为:
2、节流:
连续发送的事件在n秒内只执行一次函数。应用场景(适合大量事件按时间做平均分配触发):DOM元素拖拽;Canvas画笔功能。
现给一个场景:拖拽一个元素,要随时拿到该元素被拖拽的位置。若直接用drag事件,则会频繁触发,很容易导致卡顿。加了节流后,无论拖拽速度多快,都会每隔固定时间触发一次。
所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。
则封装后的节流函数为:
defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js
前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
获取页面中所有的checkbox怎么做?(不使用第三方框架)
升序降序排序函数sortNumber
按照flag排序,为true的在前面显示
到此这篇js深拷贝一个对象(js如何深拷贝一个对象)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/25396.html