热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web前端小组考核总结

一,JS部分1.深、浅拷贝的区别?你知道哪些实现深拷贝的方法?点击这里去往详细博客2.如何判断一个函数是否作为了构造函数?用于检测构

一,JS部分


1.深、浅拷贝的区别?你知道哪些实现深拷贝的方法?

点击这里去往详细博客


2.如何判断一个函数是否作为了构造函数?

用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。同时它可以判断一个对象是否是另一个对象的实例。


  • 语法:object instanceof constructor
    • object:某个实例对象
    • constructor:某个构造函数

 如果是则返回true,不是返回false。如代码所示,new F()返回true,即this (指向的对象,下同)是F的实例,this也已经被实例化;所以F这时候是一个构造函数。如果是F()调用,返回了false,即this不是F()的实例化对象,即F()只是一个普通函数。



3.new操作符做了哪些事情?

new操作符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象 


  1. 首先创建一个新的空对象。
  2. 然后将空对象的隐式原型对象(__proto__)指向构造函数的原型对象。
    1. 这步操作将新对象的__proto__对象赋值为构造函数的prototype属性,使得能通过构造函数创建的所有对象可以共享相同的原型。
    2. 这就意味着通过一个构造函数创建的所有对象都继承自同一个相同的对象,因此它们是同一个类的对象。
  3.  改变this指向,使它指向空对象。
  4. 对构造函数的返回值进行判断,然后返回对应的值。
    1. 一般是返回第一步创建的空对象。
    2. 但是当构造函数有返回值时,则需要做出判断后再对应的值,时对象类型的则返回对象,是原始类型的则返回第一步创建的空对象。 

4.什么是类数组,列举你知道的类数组转为数组的方法。

类数组对象,就是含有 length 属性的对象,但这个对象不是数组。 通常来说还会有 0 ~ length-1 的属性,结构表现上非常像一个数组。

const a = {1:'a', 4: 'd', length: 9};
Array.isArray(a) // false不是数组

类数组转数组


从底层上来看,这个对象的原型链上没有 Array.prototype,所以我们不能用 Array.prototype 上的 forEach、map 等数组特有的方法。        


1.我们可以用 Array.prototype.slice 内置方法。

Array.prototype.mySlice = function(start, end) {if (start == undefined) start = 0;if (end == undefined) end = this.length;const cloned = new Array(end - start);for (let i = 0; i < cloned.length; i++) {// 为了确保不存在的索引保持为 empty 值if (i in this) {cloned[i] = this[start + i];}}return cloned;
}
[].slice.call(obj);//[] 空数组效果同 Array.prototype.
//1.调用数组原型对象上的slice方法,我们不给 slice 方法传开始和结束位置参数,这样就会默认取整个范围。
//2.然后 call 来自 Function.prototype,可以使用一个指定的 this 值来调用一个函数,这里是 Array.prototype.slice。我们不给 slice 方法传开始和结束位置参数,这样就会默认取整个范围。
//3.因为 slice 用于拷贝返回一个新的子数组,且只需要被操作的目标有 length 属性就行了。

2.Array.from(),ES6 新出的方法,可以将类数组对象或者是可迭代对象转换为数组。 

 

const a = {1:&#39;a&#39;, 4: &#39;d&#39;, length: 9};
arr = Array.from(a);
console.log(arr);
//和 Array.prototype.slice.call() 有点不同,不存在的索引的值被设置了 undefined。
//如果一个对象,既是类数组对象,又是可迭代对象,Array.from() 方法会使用该对象的迭代器方法。

5. 如图,连续多次bind()的结果是什么?

bind()方法:bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。 

想要弄懂bind()就需要知道为什么需要改变this指向。详细点击这里

我们要明白在js中,多次bind()只有第一次绑定会生效


  • 后面的bind只能改变上一个bind的this指向,最终foo执行绑定的this是由第一次bind决定
  • 因此不管foo执行多少bind,都是第一次bind绑定的对象


6.说说什么是防抖和节流?尝试自定义防抖函数debounce和节流函数throttle?

防抖:一个函数连续多次触发,我们只执行最后一次

节流:一个函数连续多次触发,我们按照一定的时间间隔多次执行。

eg:


  1. 一个按钮被点击时,会发送网络请求。为了防止用户无意多次点击,或有人恶意连续发送请求,我们不希望按钮连续被点击时,每次都发送网络请求。而是过一定时间没有再点击时,我们才发送请求——即只执行最后一次,而这种操纵就是防抖。
  2. 滚动事件中会触发网络请求,但是我们不希望在滚动时一直发送网络请求,而是隔一定时间发起一次——这种操作就是节流。

防抖函数:

const foo = (fn, time = 500) => {let timer = null// 使用闭包(这样节流函数复用时,不会相互影响,且不污染全局变量)return function( ...args ) {// 如果在500毫秒内再次触发,即timer存在,此时清除掉这个timer,因此这里就实现了执行只最后一次if (timer) clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, args) // 利用apply绑定this,同时展开args数组并传参}, time)}
}

节流函数: 

// fn是要节流的函数,wait是时间间隔,默认500毫秒
const myThrottle = (fn, time= 500) => {let timer;return function( ...args ) {// 如果在500毫秒内再次触发,即timer存在,此时return,等待这个timer执行完毕。// 这里实现了时间间隔if (timer) return// 这里表示第一次触发,或是上一个timer执行完毕。就可以重新开启一个定时器。timer = setTimeout(() => {fn.apply(this, args)timer = null}, time)}
}

7.写出 [&#39;10&#39;, &#39;10&#39;, &#39;10&#39;, &#39;10&#39;, &#39;10&#39;].map(parseInt) 的结果 

map()方法定义在Javascript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。


  1. map()不会对空数组进行检测
  2. map()不会改变原始数组

 parseInt() 函数解析字符串并返回整数。只返回字符串中的第一个数字

它指定了要转换的字符串的基准进制(通俗点讲,就是告诉它,这个将被转换的字符串是几进制的)

那么本题按照对数组中每一个元素对进行下标的进制转换 

[&#39;10&#39;,&#39;10&#39;,&#39;10&#39;,&#39;10&#39;,&#39;10&#39;].map(parseInt))等同于[&#39;10&#39;,&#39;10&#39;,&#39;10&#39;,&#39;10&#39;,&#39;10&#39;].map((item,index) => {return parseInt(item,index)
})
// parseInt(&#39;10&#39;, 0) 10
// parseInt(&#39;10&#39;, 1) NaN
// parseInt(&#39;10&#39;, 2) 2
// parseInt(&#39;10&#39;, 3) 3
// parseInt(&#39;10&#39;, 4) 4

 

 

 

 

 


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
author-avatar
mobiledu2502886633
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有