【前端线上试题解析】牛客JavaScript专项(一)

  • 【前端线上试题解析】牛客JavaScript专项(一)已关闭评论
  • 249 次浏览
  • A+
所属分类:Web前端
摘要

then 接收两个回调函数并返回一个新的 promise 对象,这两个回调函数分别对应成功回调 onFullfilled 和失败回调 onRejected,这两个回调函数接收 promise 的返回值;


1. 在下列Promise所提供的方法中,用来向成功或者失败的回调函数队列中添加回调函数的是( )

then 接收两个回调函数并返回一个新的 promise 对象,这两个回调函数分别对应成功回调 onFullfilled 和失败回调 onRejected,这两个回调函数接收 promise 的返回值;

always (finally) 接收一个回调函数并返回一个新的 promise 对象,回调函数在上一个 promise 解析完成之后调用,也就是不管前面是 then 还是 catch 被调用了,它都会被调用,该回调函数不会接收参数。

2.要求匹配以下16进制颜色值,正则表达式可以为:

#ffbbad #Fc01DF #FFF #ffE 

匹配16进制的颜色值:格式为 # + 3位数字或字母 或 6位数字或字母

/^#([da-fA-F]{3}|[da-fA-F]{6})$/g

也可以写成

/#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g

3.typeof [] 返回值为

typeof只能检测数据类型,而不能检测从数据类型中派生的其他类型,数组为object派生对象,所以依然返回object

 function fn(){   console.log(1);  }  console.log(typeof []);//object  console.log(typeof '[]');//string  console.log(typeof 1);//number  console.log(typeof true);//boolean  console.log(typeof null);//object  console.log(typeof undefined);//undefined  console.log(typeof {id:2});//object  console.log(typeof fn);//function 

4.下列代码中,页面打开后能够弹出1的是?

<iframe src="javascript: alert(1)"></iframe>加载页面的时候触发;

<img src="" onerror="alert(1)"/> onerror事件 当图片不存在时,将触发

IE下的<s style="top:expression(alert(1))"></s>ie 7下会连续弹出, IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javascript表达式,CSS属性的值等于Javascript表达式计算的结果。 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。

5.下面哪一个是JavaScript 中array的正确用法?

//创建 Array 对象的语法 var arr=[1,2,3];      var arr=new Array(1,2,3);      var arr=new Array(12);     //如果只有一个数,代表数组的length是12个 var arr=new Array(0);     //清空数组 

6.JS中slice()方法

该方法选取数组的的一部分,并返回一个新数组,切片,切选好的一块,如果不写内容,相当于复制。
学习链接:JS之slice() 方法

7.exec() 方法

var str1=new RegExp("e"); document.write(str1.exec("hello")); 
  • exec() 方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
    "e".exec("hello")中,"e"是正则表达式,"hello"是检索的字符串。在"hello"字符串中,能够匹配到"e"。因此document.write("e");最后结果为e。
  • RegExp是个对象,用于存储设置的字符串。

8.输出结果是?

(function() {     var x=foo();     var foo=function foo() {         return "foobar"     };     return x; })(); 

解析

var x = foo(); var foo=function foo() {...} 

语句中变量的声明会提升,但是定义不会提升。以上代码等同于:

var foo; var x = foo(); foo = function foo() {...} 

当执行到 x = foo() 时,由于foo未被定义为函数,所以会返回

TypeError: foo is not a function 

9.以下正则表达式满足regexp.test('abc') === true?

  • /^abc$/^a表示以a开头,c$表示以c结尾,中间再夹个b
  • /[ab]{2}[^defgh]/ [ab]表示a或b {2}表示长度为2 [^defgh]表示非defgh的字符,所以可匹配的有,aac,bbc,abc,abcd
  • /[defgh]*/ "*"表示0或者多个字符,这里可匹配空,或者括号内任意字符
  • /..(?=.)/

(?=pattern)
代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。

例如对”a regular expression”这个字符串,要想匹配regular中的re,但不能匹配expression中的re,可以用”re(?=gular)”,该表达式限定了re右边的位置,这个位置之后是gular,但并不消耗gular这些字符,将表达式改为”re(?=gular).”,将会匹配reg,元字符.匹配了g,括号这一砣匹配了e和g之间的位置。

.匹配除“n”和"r"之外的任何单个字符。要匹配包括“n”和"r"在内的任何字符,请使用像“[sS]”的模式。

所以说在这里/...(?=.)/匹配的是:
前面任意三个字符,但是后面必须跟一个任意字符(除了n和r)。
但是题目给出来的字符串只有三个字符,该正则表达式至少要四个字符。