成都数之联科技前端题

来源:互联网 发布:韩国电视直播软件 编辑:程序博客网 时间:2024/04/29 12:57

1.举例数组函数find的用法

该方法是ES6新增的

数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined

[1,4,-5,10].find(function(value,index,arr){  return value>9;})//10

上面的代码中,find方法的回调函数可以接受3个参数,依次为当前的值、当前的位置和原数组

数组实例的findIndex方法的用法与find方法类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

[1,5,10,15].findIndex(function(value,index,arr){  return value>9;})//2

这两个方法都可以接受第2个参数,用来绑定回调函数的this对象。

另外这两个方法都可以发现NaN,弥补了数组的IndexOf方法的不足。

[NaN].indexOf(NaN)// -1
[NaN].findIndex(y => Object.is(NaN,y))//0

以上代码中,indexOf方法无法识别数组成员NaN,但是findIndex方法可以借助Object.is方法做到。

2.请举例说明数组函数slice的用法

3.请举例说明Object.assign()、Object.keys()的用法

Object.assign()属于ES6的语法
Object.assign方法用来将源对象所有可枚举属性复制到目标对象。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。

var target = {a:1};var source1 = {b:2};var source2 = {c:3};Object.assign(target,source1,source2);console.log(target);//{ a: 1, b: 2, c: 3 }

注意一:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。例子如下所示:

var target = {a:1,b:1};var source1 = {b:2,c:2};var source2 = {c:3};Object.assign(target,source1,source2);console.log(target);//{ a: 1, b: 2, c: 3 }

注意二:Object.assign只赋值自身属性,不可枚举的属性继承的属性不会被复制。例子如下所示:

Object.assign({b:'c'},  Object.defineProperty({},'invisible',{    enumerable:false,    value:'hello'  }));//{b:'c'}

上面的代码中,Object.assign要复制的对象只有一个不可枚举属性invisible,这个属性并没有被复制进去。

4.指出下面代码中的错误并给出改正方法

const str = 'hello js';const chars = [];for(const char in str){  chars.push(char);}console.log(chars.join(','));

1.const用来声明常量。一旦声明,其值就不能改变。所以应将
const chars = [];改为let chars = [];
2.for循环中变量char每一次循环都是一个新的变量,应该使用let声明,使得当前的char 只能本轮循环有效。所以将const char in str改为let char in str
3.for循环中char 表示的是字符串中单个字符索引,所以应将chars.push(char);改为
chars.push(str[char]);
5.请使用Promise封装下面的异步方法request,使之可以同步调用。

//request的用法如下request(url,(response) => {  console.log(response);});//请使用request实现同步方法requestSync(url)//const response = await requestSync(url);function requestSync(url) {}

5.请谈谈你对前沿web技术(如ES6/7、Shdow DOM、CSS in JS 、WebGL、WebAssembly等)

2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015。

6.哪种方式能改变作用域链

1.with
2.try catch
3.eval
while不能改变作用域链
7.DOM中怎么创建,查找,添加,删除,复制节点