牛客JS刷题
1、针对以下f函数分别执行f(2)和f()会有怎样的结果?
f = (x = x) => x;
A. 2、undefined
B. 报错、报错
C. 2、报错
D. undefined、undedfined
正确答案:C
解析:x=x 等于 let x=x; 当f(2)的时候 let x = 2;retun x,也就是2;
如果f(),变量x是未赋值的,从而触发异常
2、以下代码执行后,array的结果是?
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
A. [10,-1,6,1,4,3]
B. [10,6,4,3,1,-1]
C. [3,4,1,6,-1,10]
D. [-1,1,3,4,6,10]
正确答案:C
解析:
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
原数组var array=[-1,1,3,4,6,10];
参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
3、以下哪一项正则能正确的匹配网址: http://www.bilibili.com/video/av21061574 ()
A. /^(https?:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av(\D{1,8})\/?$/
B. /^(http:\/\/)?(\w+)\.bilibili\.com\/?video\/av(\d{1,8})\/?$/
C. /^(https?:\/\/)?(\w+)\.bilibili\.com\/?\w*$/
D. /^(http:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av\w*\/+$/
正确答案:B
解析:
排除法
首先协议是http,而不是https排除AC;其次是www,排除D,因此就只有B选项正确
4、以下哪些对象是JavaScript内置的可迭代对象?
A. Array
B. Map
C. String
D. Object
正确答案:ABC
解析:
JS可迭代对象
数组Arrays、String、Map、Set、argument、TypedArrays、Generators。
Object的原型没有实现Symbol.iterator,所以不算做可迭代对象
5、当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是
A. window.history.forward(1);
B. window.history.back(1);
C. window.history.go(-1);
D. window.history.forward(-1);
正确答案:A D
解析:
window.history.back(1); 加载历史列表中前一个URL,相当于浏览器中的后退按钮
window.history.go(-1); 相当于back()后退
window.history.go(1); 相当于forward()前进
6、以下符合ES6写法的有:
A. class Foo
{
constructor() {return Object.create(null);}
}
Foo()
B. var m=1;
export m;
C. export var firstName=’Michael’;
D.在A模块中export{readFile}后,在B模块中import readFile from ‘A’可以获取到readFile
正确答案:C
解析:
A错误,改成new Foo()
B错误,改成 export {m}或者像C选项的写法 export var m=1;
D错误,改成 import {readFile} from ‘A’
7、Alert(1&&2)的值是?
A. 1
B. 2
C. FALSE
D. TRUE
正确答案:B
解析:
&&与运算 前面为真,就会返回后面的值
8、在严格模式下执行选项的程序,不会抛出异常的是
正确答案:D
解析:
A选项,在严格模式下,虽然定时器函数的this仍然指向window对象,但是变量uname必须先声明再赋值;
B选项,在严格模式下,立即执行函数的this取决于上下环境,这里指向undefined,由于没有uname属性,同样会抛出异常;
C选项,在严格模式下,函数不允许重名参数;
D选项,构造函数的this指向实例对象p,由于p没有uname属性,因此输出undefined。
9、以下代码的执行后,str的值是:
var str = "Hellllo world";
str = str.replace(/(l)\1/g, '$1');
A. Helo world
B. Hello world
C. Helllo world
D. Hellllo world
正确答案:B
解析:
(l)表示第一个分组里有l
\1表示所获取的第1个()匹配的引用
$1表示第一个分组里的值l
所以
(l)\l 表示匹配两个连续字符ll
str.replace(/(l)\1/g, '$1') 表示将ll替换成l
10、下面哪一个语句可以实现在jQuery中找到所有元素的同辈元素?
A. eq(index)
B. find(expr)
C. siblings([expr])
D. next()
正确答案:C
siblings()方法,返回被选元素的所有同胞元素
next()返回被选元素的下一个同胞元素
find()返回被选元素的后代元素,一路向下直到最后一个后代
eq()返回第几个元素
11、以下代码执行后,输出的结果为()
var a = 10;
function a(){}
console.log(typeof a)
A. “number”
B. “object”
C. “function”
D. “undefined”
正确答案:A
解析:
函数提升优先级高于变量提升,且不会被同名变量声明覆盖,但是会被变量赋值后覆盖。在本题中函数a和同名变量a会先进行提升,之后变量a又被赋值为10,在输出a的typeof值,此时a的值为10,类型为number
12、下列哪些事件不支持冒泡?
A. resize
B. click
C. blur
D. mouseleave
正确答案:ACD
解析:
mouseenter、mouseleave、blur、focus、load、unload、resize
13、下列不属于document对象方法的是
A. onload
B. querySelectorAll
C. children
D. ajax
正确答案:ACD
A选项是window.onload
C选项是parentNode.children
14、以下哪些方法会返回一个数组?
A. Object.keys()
B. String.prototype.split()
C. Array.prototype.join()
D. Promise.all()
正确答案:AB
C选项返回的是一个字符串
D选项返回的是一个Promise实例
15、下列关于闭包描述正确的是?
16、以下关于History对象的属性或方法描述正确的是
正确答案:ACD
go()加载history列表中的某个具体页面
17、以下代码执行后,array的结果是
let array = [,1,,2,,3];
array = array.map((i) => ++i)
正确答案:A
解析:
ES5
forEach(),filter(),reduce(),every()和some()都会跳过空位
map()会跳过空位,但会保留这个值
join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串
ES6 中都会将空位当作undefined
18、已知arr = [1,2,NaN,1,4,2,NaN],现为输出arr的不重复元素(重复元素只输出一次),则下列程序中的①处,可以作为判断条件的是()
var newArr = [];
for(var i = 0 ;i<arr.length;i++){
if(①){
newArr.push(arr[i]);
}
}
console.log(newArr);
正确答案:D
解析:
链接:
indexOf()方法与includes()方法的一个重要区别在于indexOf()并不能判断数组的NaN元素,换句话说,不管数组arr是否有NaN元素,arr.indexOf(NaN)返回值都是-1,所以AB选项不能对NaN进行去重,不符合题意;如果newArr数组不含有arr数组的某个元素,就应该把该元素添加到newArr数组中,如果含有,则不能添加,这样才能达到去重的目的,即newArr.includes(arr[i])返回值为false时,就应该执行if内的语句,所以应该使用“!”对条件取反,D选项符合题意,C选项不符合题意。
19、以下哪些事情支持冒泡?
20、给网页添加javaScript的方式有
正确答案:ABC
解析:
@import 用来导入css文件
21、执行以下程序,下列选项中,说法错误的是
正确答案:BD
解析:
输出 arguments.length为3;arguments是一个伪数组,不是真正意义上的数组
22、Angular JS中的服务实质上是(单例对象)
23、Angular中若需要给子scope发消息,需使用哪个方法($broadcast)
24、下列代码存在几个变量没有被回收?
var i = 1;
var i = 2;
var add = function() {
var i = 0;
return function()
{
i++;
console.log(i);
}
}();
add();
A、0个
B、1个
C、2个
D、3个
正确答案:D
解析:
1.变量声明提升,提升完赋值后的全局 i = 2,add = function(){}
2.执行add()函数后,形成闭包,使得局部 i 在函数执行后不会被销毁。
25、请问以下JS代码最后输出的len值是多少?
var len = 117;
let func = {
len: 935,
showLen: function() {
console.log(this.len);
},
show: function() {
(function(cb) {
cb();
})(this.showLen)
}
}
func.show();
A. 117
B. 935
C. undefined
D. null
正确答案:A
解析:
立即执行函数的this指向的是window(非严格模式下),因为作为一个匿名函数,在被调用的时候,我们往往就是直接调用,因此它的this是非常确定的,那么len就区window下的len值即117
26、以下哪一项不属于浏览器Response Headers字段:
正确答案:A
解析;
Referer是request Header里的内容,不是response header里的内容
27、下列关于JavaScript中变量的说法,错误的是?
正确结果:B
D代码测过是对的
B可能是var key=val的形式赋值
28、NOSCRIPT标签是做什么用的?(用来定义在脚本未被执行时替代内容)
29、执行以下程序,下列选项中,说法正确的是()
var obj = {brand:'华为',price:1999};
Object.defineProperty(obj,'id',{value:1})
Object.defineProperty(obj,'price',{configurable:false})
console.log(Object.keys(obj).length); ...①
for (var k in obj){
console.log(obj[k]); ...②
}
obj.price = 999;
delete obj['price']
console.log(obj); ...③
正确答案:C
解析:
A选项,Object.keys(obj)返回obj对象中自身可枚举属性组成的数组,虽然obj对象新增了id属性,但该属性是不可枚举的,故1式的输出式2;
B选项,使用for……in循环可以遍历对象可枚举的属性,id属性由于不可枚举,因此仍然不会被遍历到
D选项,pice属性设置了不可删除属性 configurable:false
30、执行以下程序,输出结果为()
function fn(o,val){
o.b = 1;
val = 1;
}
var obj = {b:0};
var num = 0;
fn(obj,num);
console.log(obj,num);
正确答案:B
解析:
JS传参包括基本数据类型传参和复杂数据类型传参,基本数据类型传参时间上是复制值传递,函数对形参的处理不会影响到外面的实参,而复杂数据类型传参是引用传递,即把数据的地址复制月份后传递给函数中,此时形参和实参指向同一地址的对象,对于形参的修改会影响到实参。
31、以下这段JavaScript程序的输出是什么?
<SCRIPT LANGUAGE="JavaScript">
var a="undefined";
var b="false";
var c="";
function assert(aVar){
if(aVar)
alert(true);
else
alert(false);
}
assert(a);
assert(b);
assert(c);
</SCRIPT>
正确答案:B
解析:
变量abc都是字符串型的变量,而不是真正的undefined和false,在判断里都会被认为是真值,显示true,只有空串为false
32、下面哪些语句执行结果为true
正确答案:BCE
33、Angular中使用指令,是在什么时候绑定监听?(link时)
34、请问以下JS代码输出的结果是什么?
function f(x) {
console.log(x);
var x = 200;
console.log(x);
}
f(a = 100);
console.log(a);
正确结果:C
解析:
JS中的函数是非惰性求值,也就是说f(a=100)是将a=100完成计算赋值后的结果即100传入到了f函数中,传入的是值而不是逻辑,相当于f(100),同时变量a也处于函数外也即全局环境了,因此f函数里面的x一开始是传进来的100,后续被重新赋值为200
35、请问以下JS代码的输出是什么?
let A = function() {}
A.prototype.a = 1;
let B = new A();
A.prototype = {
b: 2,
c: 3
}
let C = new A();
A.prototype.d = 4;
console.log(B.a);
console.log(B.b);
console.log(C.c);
console.log(C.d);
正确答案:B
解析:
在B之前,A.prototype.a,所有B是可以访问a的,后来C之前,A.prototype被覆盖了,C可以访问到A.proptotype,其中的b,c后来又添加了d,C也是可以访问到的
36、关于身份证号,以下正确的正则表达式为()
正确答案:AC
37、执行以下程序,输出结果为
let flag1 = null || undefined;
let flag2 = null && undefined;
if (flag1 === true) console.log('flag1');
if (flag2 === false) console.log('flag2');
正确答案:D
解析:
不管是a || b还是a && b,其表达式的返回值要么是a,要么是b,在本题中,flag1和flag2的值只可能是undefined和null中的一个。当使用“===”进行比较时,需要严格区分数据类型,所以flag1 === true的返回结果一定是false,flag2 === false的返回结果也一定是false,故不会有任何输出,D选项正确。
38、执行以下程序,输出结果为()
var a = 2;
function fn(){
b();
return ;
var a = 1;
function b(){
console.log(a);
}
}
fn();
A,1
B,2
C,undefined
D,抛出异常
正确答案:C
解析:
虽然return语句可以终止函数,但是return语句后如果有变量和函数声明,仍然存在变量提升和函数提升,即在函数fn内,函数b和局部变量a会提升到函数的开头部分。当调用函数b时,需要查找并输出a的值,根据作用域链查找规则,会现在函数fn内找到已经声明的局部变量a,由于局部变量a的赋值并未跟着发生提升,因此输出的a值为undefined
39、依据以下JS代码,在位置A打印变量a与在位置B打印变量a各会有怎样的输出?
var a = 1;
function test(){
// 位置A
class a {}
// 位置B
}
test();
正确答案:B
解析:
在位置A的时候并没有找到a,在位置B中找到的a是class a {}
40、下面哪些语句可以在JS里判断一个对象是否为String类型?
正确答案:A
解析:
注意题目中是判断一个对象是否为String类型,判断对象是用instanceof
41、这段代码运行后的输出是:
(function() {
var a = b = 5;
})();
console.log(b);
console.log(a);
正确答案:D
解析:
var a=b=5,即var a=5;b=5;函数环境中不带var默认为全局变量
42、执行以下程序,输出结果为()
class Phone{
constructor(price){
this.price = price;
}
get price(){
return 999;
}
}
var p = new Phone(888);
console.log(p.price);
A、999
B、undefined
C、抛出异常
D、888
正确答案:C
解析:
当类中一个属性只有get()方法而无set()方法时,该属性是无法进行赋值的,连构造方法中的初始化都不行,因此,当对象的price属性在构造方法中进行初始化,会抛出异常
43、Angular JS中的$apply()的作用是?
A、手动绑定外部数据
B、格式化数据
C、使方法生效
D、发送消息给其他controller
正确答案:C
44、JS中存在块语句,那么请问以下块语句的集合最终输出的值是多少?
eval(`{
1 + 3;
a = 2;
x:break x;
3;
4 + 6;
;
}`)
A、4
B、undefined
C、10
D、3
正确答案:C
解析:
在块中多个语句执行时,一般后者会覆盖前者,但是;和break的返回值都是empty,无法覆盖任何值。而3覆盖了4,10最终又覆盖了3,因此最终的结果是10。
45、在很多时候,我们需要给网页中的一些元素不停的切换样式,那么要怎样实现给某个元素删除一个样式的同时,添加另外一个样式( )
正确答案:A
解析:
考察JQuery中选择器的知识
常用有三种:
①元素选择器:$("TagName")
②ID 选择器: $("#ID")
③类选择器:$(".className")
46、以下代码的输出结果是
var f = function g() {
return 23;
};
typeof g();
正确结果:D
解析:
如果是typeof f,结果是function
如果是typeof f(),结果是number
如果是typeof g,结果是undefined.
如果是typeof g(),结果是ReferenceError,g is not defined
47、以下JavaScript代码,在浏览器中运行的结果是
var foo = {n:1};
(function(foo){
console.log(foo.n);
foo.n = 3;
var foo = {n:2};
console.log(foo.n);
})(foo);
console.log(foo.n);
正确答案:A
解析:
第一步:进行预编译,var全局变量foo、匿名函数 function、var局部变量foo
第二步:代码自上而下、自左向右执行计算:
对全局变量foo进行赋值foo={n:1};注意:此值为对象,属于引用类型;
匿名函数传入参数foo={n:1}自执行;
console.log(foo);打出数字1;
由于存在foo局部变量,那么对foo变量进行赋值foo={n:3},同时更改了引用类型的参数值,全局foo变量被重新赋值foo={n:3};
对局部变量foo进行重新赋值foo={n:2};
console.log(foo);打出数字2;
全局变量foo={n:3},因此,console.log(foo);打出数字3;
48、Math.round(-2019.5)的结果是
A、2019
B、-2019
C、2020
D、-2020
正确答案:B
49、以下哪些操作会触发Reflow
var obj = document.getElementById(“test”);
正确答案:BC
B选项计算了offsetHeight
C选项重新设置了高度
50、请问以下JS代码会输出什么
var a = 10;
(function a() {
a = 20;
console.log(a);
})()
A、10
B、20
C、undefined
D、输出函数a的内容
正确答案:D
解析:
首先存在变量提升和函数提升,所以一开始变量a被提升,值为undefined,由于函数提升优先级更高,所以a先被赋值为函数。
又因为是立即执行函数所以执行了函数a输出a目前的值(即函数),之后才是被赋值为10
51、从字符串 const str = ‘qwbewrbbeqqbbbweebbbbqee’;中能得到结果 [“b”, “bb”, “bbb”, “bbbb”] 以下错误语句是?
正确答案:B
解析:
?出现0次或1次. [0,1]
* 出现0次或多次. [0,+∞]
+ 出现1次或多次 [1,+∞]
题目中得到的结果至少得有一个b,而*可能是出现0次得,所以不符合