JS面试题汇总(六)

  • 4.2 如果返回值是一个复杂数据类型,那么调用构造函数的时候,返回值就是这个return之后的那个复杂数据类型。

56. 如何获取浏览器版本信息

参考答案:

window. navigator. userAgent

57. 如何实现文件断点续传

参考答案:

断点续传最核心的内容就是把文件“切片”然后再一片一片的传给服务器,但是这看似简单的上传过程却有着无数的坑。

首先是文件的识别,一个文件被分成了若干份之后如何告诉服务器你切了多少块,以及最终服务器应该如何把你上传上去的文件进行合并,这都是要考虑的。

因此在文件开始上传之前,我们和服务器要有一个“握手”的过程,告诉服务器文件信息,然后和服务器约定切片的大小,当和服务器达成共识之后就可以开始后续的文件传输了。

前台要把每一块的文件传给后台,成功之后前端和后端都要标识一下,以便后续的断点。

当文件传输中断之后用户再次选择文件就可以通过标识来判断文件是否已经上传了一部分,如果是的话,那么我们可以接着上次的进度继续传文件,以达到续传的功能。

有了 HTML5 的 File api 之后切割文件比想想的要简单的多的多。

只要用 slice 方法就可以了

var packet = file.slice(start, end);

参数 start 是开始切片的位置,end 是切片结束的位置 单位都是字节。通过控制 start 和 end 就可以是实现文件的分块

file.slice(0,1000);

file.slice(1000,2000);

file.slice(2000,3000);

// …

在把文件切成片之后,接下来要做的事情就是把这些碎片传到服务器上。

如果中间掉线了,下次再传的时候就得先从服务器获取上一次上传文件的位置,然后以这个位置开始上传接下来的文件内容。

解析:参考

58. 数组的常用方法

参考答案:

1. Array. map()

此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组

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

let newArr = arr.map(x => x * 2);

//arr= [1, 2, 3, 4, 5] 原数组保持不变

//newArr = [2, 4, 6, 8, 10] 返回新数组

2. Array. forEach()

此方法是将数组中的每个元素执行传进提供的函数,没有返回值,直接改变原数组,注意和 map 方法区分

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

num.forEach(x => x * 2);

// arr = [2, 4, 6, 8, 10] 数组改变,注意和map区分

3. Array. filter()

此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回

let arr = [1, 2, 3, 4, 5]

const isBigEnough => value => value >= 3

let newArr = arr.filter(isBigEnough)

//newNum = [3, 4, 5] 满足条件的元素返回为一个新的数组

4. Array. every()

此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回 true,否则为 false:

let arr = [1, 2, 3, 4, 5]

const isLessThan4 => value => value < 4

const isLessThan6 => value => value < 6

arr.every(isLessThan4) //false

arr.every(isLessThan6) //true

5. Array. some()

此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回 true,若所有元素都不满足判断条件,则返回 false:

let arr = [1, 2, 3, 4, 5]

const isLessThan4 => value => value < 4

const isLessThan6 => value => value > 6

arr.some(isLessThan4) //true

arr.some(isLessThan6) //false

6. Array. reduce()

此方法是所有元素调用返回函数,返回值为最后结果, 传入的值必须是函数类型:

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

const add = (a, b) => a + b;

let sum = arr.reduce(add);

//sum = 15 相当于累加的效果

与之相对应的还有一个 Array. reduceRight() 方法,区别是这个是从右向左操作的

7. Array. push()

此方法是在数组的后面添加新加元素,此方法改变了数组的长度:

let arr = [1, 2, 3, 4];

arr.push(5);

console.log(arr); //[1, 2, 3, 4, 5]

console.log(arr.length); //5

8. Array. pop()

此方法在数组后面删除最后一个元素,并返回数组,此方法改变了数组的长度:

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

arr.pop();

console.log(arr); //[1, 2, 3, 4]

console.log(arr.length); //4

9. Array. shift()

此方法在数组后面删除第一个元素,并返回数组,此方法改变了数组的长度:

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

arr.shift();

console.log(arr); //[2, 3, 4, 5]

console.log(arr.length); //4

  1. Array.unshift()

此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度:

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

arr.unshift(6, 7);

console.log(arr); //[6, 7, 2, 3, 4, 5]

console.log(arr.length); //7

  1. Array.isArray()

判断一个对象是不是数组,返回的是布尔值:

Array.isArray([1, 2, 3, 4]); // --> true

var obj = {

a: 1,

b: 2

};

Array.isArray(obj); // --> false

Array.isArray(new Array); // --> true

Array.isArray(“Array”); // --> false

  1. Array.concat()

此方法是一个可以将多个数组拼接成一个数组:

let arr1 = [1, 2, 3]

arr2 = [4, 5]

let arr = arr1.concat(arr2)

console.log(arr) //[1, 2, 3, 4, 5]

  1. Array.toString()

此方法将数组转化为字符串:

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

let str = arr.toString()

console.log(str) // 1,2,3,4,5

  1. Array.join()

此方法也是将数组转化为字符串:

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

let str1 = arr.toString()

let str2 = arr.toString(‘,’)

let str3 = arr.toString(‘##’)

console.log(str1) // 12345

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-D2yMwrMi-1715548732494)]

[外链图片转存中…(img-ByzuVJ1e-1715548732494)]

[外链图片转存中…(img-vKASSq08-1715548732495)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值