JavaScript100道大厂笔试面试题(一)
以下题目来自Duing公众号,本文所有题目已获得原作者授权
1、以下代码输出的结果是:
var foo=function bar(){}
console.log(typeof bar);
2、以下代码输出结果是:
var a=1;
if(true){
console.log(a);
let a=2;
}
3、以下代码输出的结果是:
var a=[1,2,3,3,5,6,6,6,'A',undefined,true,null]
var s=new Set(a);
console.log(s.size);
4、请你写出代码,计算两个数组的交集:
let arr1=[1,2,3,4,5];
let arr2=[4,5,6,7,8];
5、以下代码运行后,在控制台里打印输出的内容为:
let x=1;
function f1(x,y=x){
console.log(y);
}
function f2(y=x){
let x=0;
console.log(y);
}
f2(2);
f1();
6、以下代码运行后,在控制台里打印输出的内容为:
fn(123)
var a=456;
function fn(a){
console.log(a);
}
7、eadonly和disabled哪个属性对input和textarea元素都生效?
A readonly B disabled
8、以下代码输出结果为:_________,并详细说明原因:
function F(){
this.a=1;
}
var obj=new F();
console.log(obj.prototype);
9、以下代码输出的结果为:
if(false){
var a=1;
let b=2;
}
console.log(a);
console.log(b);
10、请写出代码,计算两个数组的差集:
let arr1=[1,2,3,4,5];
let arr2=[4,5,6,7,8]
11、a、b、c、的值分别为:
var [a=3,b=a,c=3]=[1,2,undefined];
12、以下代码运行后,ul里的内容顺序为:
<ul id="list">
<li>百度</li>
<li>阿里</li>
<li>腾讯</li>
</ul>
<script>
var list=document.getElementById('list');
var lis=list.querySelectorAll('li');
list.replaceChild(lis[2],lis[1]);
list.insertBefore(lis[1],list.children[2]);
</script>
13、以下代码执行后,控制台里打印的内容为:
var c=1;
function c(){
console.log(c);
var c=3;
}
console.log(c);
c(2);
14、以下代码执行后,控制台里打印的内容为:
var name='kaivan';
(function () {
if(typeof name==='undefined'){
var name='chen';
console.log(name);
}else {
console.log(name);
}
})();
15、以下代码执行后,控制台里打印的内容为:
var a=10;
function test() {
a=100;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test();
16、以下代码执行后,控制台里打印出的内容为:
if(!('a' in window)){
var a=1;
}
console.log(a);
17、以下代码执行后,控制台里打印的内容为:
var val=1;
var obj={
val:2,
del:function () {
console.log(this);
this.val*=2;
console.log(val);
}
}
obj.del();
18、以下代码执行后,控制台里打印出的内容为:
var name='kaivon';
var object={
name:'chen',
getNameFunc:function () {
return function () {
return this.name;
}
}
}
console.log(object.getNameFunc()())
19、以下代码执行后,控制台里打印的内容为:
var name='kaivon';
var object={
name:'chen',
getNameFunc:function () {
var that=this;
return function () {
return that.name;
}
}
}
console.log(object.getNameFunc()())
20、以下代码执行后,控制台里打印的内容为:
var a=6;
setTimeout(function () {
a=666;
},0)
console.log(a);
21、以下的代码执行后,控制台里打印的内容为:
(function () {
var a=b=3;
})();
console.log(typeof a==='undefined');
console.log(typeof b==='undefined')
22、以下的代码执行后,控制台里打印的内容为:
var a=(function (foo) {
return typeof foo.bar;
})({foo:{bar:1}});
console.log(a);
23、以下的代码执行后,控制台里打印的内容为:
function f() {
return f;
}
console.log(new f() instanceof f);
24、以下的代码执行后,控制台里打印的内容为:
function A() {}
A.prototype.n=1;
var b=new A();
A.prototype={
n:2,
m:3,
}
var c=new A();
console.log(b.n,b.m);
console.log(c.n,c.m)
25、以下的代码执行后,控制台里打印的内容为:
console.log(false.toString());
console.log([1,2,3].toString());
console.log(1.toString());
console.log(5..toString());
26、以下的代码执行后,控制台里打印的内容为:
console.log(1 + '2' + '2');
console.log(1 + +'2'+ '2');
console.log(+ '1' - +'1'+'2');
console.log('A' - 'B' + '2');
console.log('A' - 'B' + 2)
27、以下的代码执行后,控制台里打印的内容为:
var a=666;
console.log(++a);
console.log(a++);
console.log(a);
28、以下的代码执行后,控制台里打印的内容为:
var a={n:1};
var b=a;
a.x=a={n:2};
console.log(a.n,b.n);
console.log(a.x,b.x);
29、以下的代码执行后,控制台里打印的内容为:
console.log(c);
function c(a) {
console.log(a);
var a=3;
function a() {
}
}
c(2);
30、以下的代码执行后,控制台里打印的内容为:
console.log(typeof a);
function a() {};
var a;
console.log(typeof a);
31、以下的代码执行后,控制台里打印的内容为:
var a;
var b='undefined';
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
32、以下的代码执行后,控制台里打印的内容为:
var obj={n:1};
function fn2(a) {
a.n=2;
}
fn2(obj);
console.log(obj.n);
33、以下的代码执行后,控制台里打印的内容为:
var x=10;
function fn() {
console.log(x);
}
function show(f) {
var x=20;
fn();
}
show(fn);
34、以下的代码执行后,控制台里打印的内容为:
Object.prototype.bar=1;
var foo={
goo:undefined
};
console.log(foo.bar);
console.log('bar' in foo);
console.log(foo.hasOwnProperty('bar'));
console.log(foo.hasOwnProperty('goo'));
35、以下的代码执行后,控制台里打印的内容为:
Object.prototype.bar=1;
var foo={
moo:2,
}
for(var i in foo){
console.log(i);
}
36、以下的代码执行后,控制台里打印的内容为:
function foo1() {
return{
bar:'hello'
};
}
function foo2() {
return{
bar:'hello'
};
}
console.log(foo1());
console.log(foo2());
37、以下的代码执行后,控制台里打印的内容为:
console.log(function () {
return typeof arguments;
}())
38、以下的代码执行后,控制台里打印的内容为:
console.log(Boolean(false));
console.log(Boolean('0'));
console.log(Boolean(''));
console.log(Boolean(NaN));
39、以下的代码执行后,控制台里打印的内容为:
var x=1;
if(function f (){}){
x+typeof f;
}
console.log(x);
40、以下的代码执行后,控制台里打印的内容为:
console.log('b'+'a'+ + +'a'+'a')
41、以下的代码执行后,控制台里打印的内容为:
var obj={
a:1,
b:2
}
Object.setPrototypeOf(obj,{c:3});
Object.defineProperty(obj,'d',{value:4,enumerable:false});
for(let prop in obj){
console.log(prop);
}
42、以下的代码执行后,控制台里打印的内容为:
var x=10;
var foo={
x:90,
getX:function () {
return this.x;
}
};
console.log(foo.getX());
var xGetter=foo.getX;
console.log(xGetter());
43、写一个sum方法,当使用下面的语法调用时它将正常工作:
console.log(sum(2,3));
console.log(sum(2)(3))
44、当用户点击“按钮4”时什么被记录到控制台?为什么?
for(var i=0;i<5;i++){
var btn=document.createElement('button');
btn.appendChild(document.createTextNode('按钮'+i));
btn.addEventListener('click',function () {
console.log(i);
})
document.body.appendChild(btn);
}
45、以下代码执行后,d里的内容为?
var d={};
var b=['car','house'];
b.forEach(function (k) {
d[k]=undefined;
})
console.log(d);
46、以下代码执行后,控制台里的内容为?
var arr1='john'.split('');
var arr2=arr1.reverse();
var arr3='jones'.split('');
arr2.push(arr3);
console.log('arr1:length='+arr1.length+'last='+arr1.splice(-1));
console.log('arr2:length='+arr2.length+'last='+arr2.splice(-1));
47、以下代码执行后,控制台里的内容为?
console.log("0 || 1="+(0||1));
console.log('1 || 2='+(1||2));
console.log('0&&1='+(0&&1));
console.log('1&&2'+(1&&2));
48、以下代码执行后,控制台里的内容为?
var a={}
b={key:'b'};
c={key: 'c'};
a[b]=123;
a[c]=456;
console.log(a[b]);
console.log(a[c]);
49、以下代码执行后,控制台里的内容为?
(function (x) {
return (function (y) {
console.log(x);
})(2)
})(1);
50、以下代码执行后,控制台里的内容为?
var length=10;
function fn() {
console.log(this.length);
}
var obj={
length:5,
method:function (fn) {
fn();
arguments[0]();
}
};
obj.method(fn,1);
51、以下代码执行后,控制台里的内容为?
var myObject={
foo:'bar',
func:function () {
var self=this;
console.log('outer func: this.foo='+this.foo);
console.log('outer func: self.foo='+self.foo);
(function () {
console.log('inner func :this.foo='+this.foo);
console.log('inner func :self.foo='+self.foo)
})()
}
}
myObject.func();
52、有关this运算符说法不正确的是?
A this表示当前对象的一个引用 B 在JS中,由于JS的动态性,this的指向在运行时才正确 C this关键字在JavaScript中和执行环境,而非声明环境有关 D 通过早期绑定可以实现对this的高度复用
53、以下哪个不是JavaScript中的错误类型?
A 、语法错误 B、系统错误 C 、类型错误 D 、引用错误
54、有关循环语句说法正确的是?
- A、for...in循环遍历不到继承的属性
- B、do...while在判断条件前会执行一次代码块
- C、for循环中三个表达可以省略,分号也可以省略
- D、while循环语句至少会执行循环体一次
55、如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是?
A、null B、-1 C、0 D、undefined
56、JavaScript函数中包含了一个参数对象下面有关arguments的描述错误的是?
A、arguments是个比较特殊的对象,使用者无需明确指出参数名即可访问到它们 B、可以使用arguments的属性length来检测传递给函数的参数个数 C、借助于arguments对象,我们可以模拟函数重载 D、arguments是一个标准数组
57、有关使用typeof运算符的不正确结论是?
A、typeof运算符后面的参数可以使用括号引起来,也可以不带括号 B、typeof运算符的括号里可以放多个参数 C、使用typeof运算符检测的返回结果值总是一个小写字符串形式 D、typeof 和instanceof可以相互代替
58、使用instanceof运算符时正确的结论是?
A、一个空对象不能使用instanceof来检测 B、instanceof运算符会顺着原型链向上查找 C、instanceof的左操作数只能是对象类型的数据 D、instanceof可以用来检测数据类型
59、给定x=6以及y=3,下列结果正确的是?
A、x<10&&y>1 的结果为true B、x==5|| y==5 的结果为true C、!(x==y)的结果为false D、!!x==x的结果为true
60、如下不正确的结论是:
A、关系运算符的优先级比'&&'和'||'的要高 B、假值是false、null、undefined、0、-0、NaN和'';所有其它的值(包括所有对象)都是真值 C、‘&&’运算符的结果并不一定是布尔值 D、关系表达式的运算结果未必总是true或false
61、已知“var obj={a:“Hello”};”于是“obj && obj.a;”的结果是?
A、true B、null C、'Hello' D、false
62、下面关于逻辑运算符的描述错误的是?
A、!总是返回true或者false B、!!10与10是一样的 C、||运算符会先计算左边的表达式,如果结果为false,那么再计算右侧的表达式,并返回右侧表达式的计算结果 D、语句'if(a==b) stop()'与语句‘(a==b)&&stop();’表达含义一致
63、有关for循环语句说法错误的是?
A、for循环中三个表达式中的任何一个都可以忽略,但是两个分号是必不可少的 B、for循环语句的初始化部分仅在循环开始之前执行一次 C、for循环变量必须是数字类型 D、for循环语句中的三部分(初始化部分、测试部分和更新部分)都是可选的
64、有关if语句说法不正确的是?
A、if后面的条件必须使用括号包围 B、有的if语句可以没有else部分 C、if语句也支持嵌套 D、else中语句的执行总是会匹配最外层的那个if语句中的条件判断
65、有关switch语句的结论错误的是?
A、两个case不可共同使用一个break语句 B、对每个case的匹配操作实际上是'==='恒等运算符比较,因此,表达式和case的匹配并不会做任何数据类型转换 C、ECMAScript标准的确允许每个case关键字更随任意的表达式 D、如果在函数中使用switch语句,有时可以使用return来代替break
66、有关JS函数不正确的结论有?
A、定义函数时声明了多个参数,但调用时可以不使用它们 B、函数体是由JavaScript语句组成的,必须使用花括号括起来,即使函数体不包含任何语句 C、子函数可以在父函数外而正常访问 D、定义函数时,并不执行函数体内的语句,调用的时候才会执行
67、有关var语句的错误结论的是?
A、var 声明的变量有时可以通过delete删除 B、如果在顶层代码中使用var语句,它声明的是全局变量 C、如果var语句出现在函数体内,那么它定义的是一个全局变量 D、var 和function都是声明语句,用于声明或者定义变量或者函数
68、有关JS变量说法错误的是?
A、if语句里声明的变量会被预解析 B、使用var 多次声明同一个变量没有问题 C、JS变量一旦定义就无法重新定义 D、const声明的变量是不能修改的
69、有关in运算符错误的结论是?
A、for...in运算符不可用于数组元素的遍历 B、in运算符用来判断对象是否存在指定名称的属性 C、如果in运算符右侧的对象拥有一个名为左操作数的属性名,那么表达式返回true,否则,返回false D、in运算符也可以用在数组身上
70、关于JS赋值操作符描述错误的是?
A、赋值操作符的顺序是从左至右 B、"i=j=k="Hello kaivon!";"的含义是把三个变量都初始化为"Hello kaivon!" C、赋值表达式的顺序是从右往左 D、赋值表达式的值就是右操作数的值
71、以下正确的选项是?
A、“one”<3结果为true B、"111"<3结果为true C、"100"+200的结果是300 D、加号运算符的一侧为字符串的话,会把两个数据都转成字符串
72、下列说法正确的是?(多选)
A、直接调用Math.max时它并不接受数组 B、对于一些系统内置对象,使用toString调用不会得到你想要的源码 C、函数的length属性返回函数中的形参个数 D、arguments对象用于描述传递给一个函数的参数数组,是一个类数组本身
73、下面正确的是?(多选)
A、‘111’<'33'的比较结果为true B、1>=Infinity的结果为true C、'100'+200表达式中200会被转成数字,结果为300 D、‘100’+‘200’的表达式结果为‘100200’
74、关于JS函数的说法错误的是?
A、函数可以通过定时器去调用 B、自执行的函数可以形成一个独立作用域 C、delete可以删除全局函数 D、如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是undefined
75、有关this运算符正确的是(多选)?
A、this对象不能用于箭头函数中 B、apply和call能够强制改变函数执行时的当前对象,让this指向其它对象 C、由于JS的动态性,this的指向在运行时才确定 D、this运算符总是指向当前的对象
76、有关跳转语句的说法正确的是?
A、switch中,case语句如果没有break,它会继续执行下一个case语句 B、break是跳出当前次循环,containue是跳出整个循环 C、break语句可以阻止函数继续运行 D、在for...in中不能使用break
77、下面有关循环语句正确的结论是?(多选)
A、for...in循环可以像枚举对象属性一样枚举数组索引 B、for...in语句是for循环语句完全相同,它循环的范围是一个对象的所有属性或是一个数组的所有元素 C、for循环的循环变量未必都是数字 D、for循环语句中的所有三部分(初始化语句,条件语句和变化语句)都是可选的
78、下面有关条件及分支语句正确的结论是?(多选)
A、case关键字后也可以使用表达式 B、if语句的括号里表达式结果为被转成布尔值 C、else语句可以独立使用 D、if后面的条件可以不使用括号
79、下面说法错误的是?
A、CommonJS模块规范可以和AMD规范都是针对服务端制定的规范 B、字符串属于原始数据类型 C、任意JS值都可以转换为布尔值 D、null和undefined没有包装对象,如果访问它们的属性,会引发一个类型错误
80、下面说法错误的是?
A、在ECMAScript中,‘+’既是二元加法运算符,又是一元数字运算符,还能够把两个字符串连接起来 B、JavaScript运算符通常会根据需要对操作数进行类型转换 C、在JS中,for/in循环只能遍历对象的所有属性 D、字符串可以当作只读数组,使用方括号+下标的形式来访问单个字符
81、关于append与appendChild的区别,下面说法错误的是?
A、append方法可以添加文本节点,比如append('杨戬'),appendChild方法不行 B、append方法是jqery的,appendChild方法是原生的 C、append方法可以同时插入一个节点以及一个文本,appendChild()只能添加一个 D、append方法没有返回值,appendChild会返回添加的那个节点
82、以下代码运行后,在控制台里输出的内容为?
function output(a) {
console.log(a);
}
output(typeof function () {
output('Hello World!')
}())
83、以下代码运行后,在控制台里输出的内容为?
function test() {
var n=1573;
function add() {
n++;
console.log(n);
}
return {n:n,add:add}
}
var result=test();
var result2=test();
result.add();
result.add();
console.log(result.n);
result2.add();
84、以下代码运行后,在控制台里输出的内容为?
var b=1;
function outer() {
var b=2;
function inner() {
b++;
var b=3;
console.log(b);
}
inner();
}
outer();
85、关于new操作符的描述错误的是?
A、new第一步是创建一个空对象,并且把this指向该对象 B、new会返回创建的这个对象 C、new不能够调用函数 D、new 可以用来生成一个实例
86、关于post与get的区别描述错误的是?
A、GET会将数据拼接到url地址中,POST会把数据放到请求头里 B、GET传递的数量要比POST的小 C、GET可以跨域,POST不能跨域 D、GET历史参数保留在浏览器历史中,POST参数不会保存在浏览器历史中
87、有关各逻辑运算符错误的结论有?
A、JS逻辑与运算符‘&&’会在左右两边的表达式结果都为真的时候才返回右边表达式的值 B、JS逻辑与运算符'&&'不可能出现不会计算右操作数的情形 C、JS逻辑或运算符‘||’可能出现不会计算右操作数的情形 D、JS逻辑与运算符‘&&’可能出现不会计算右操作数的情形
88、在下列选项中选出程序的打印输出结果:
var settings={
username:'alan',
level:19,
health:90
}
var data=JSON.stringify(settings,['level','health']);
console.log(data);
A、"{"level":19,"health":90}" B、"{"username":"alan"}" C、"["level","health"]" D、"{"username":"alan","level":19,"health":90}"
89、下列打印的输出结果是?
function Dog(name) {
this.name=name
}
Dog.prototype.bark=function () {
console.log(`Woof I am ${this.name}`)
}
const pet=new Dog('Mara');
pet.bark();
delete Dog.prototype.bark;
pet.bark();
A、‘Woof I am Mara’ ,TypeError B、'Woof I am Mara','Woof I am Mara' C、'Woof I am Mara',undefined D、TypeError,TypeError
90、选出程序执行的打印结果:
function greeting() {
throw "Hello world!";
}
function sayHi() {
try {
const data=greeting();
console.log('It worked!',data)
}catch (e) {
console.log("Oh no error:",e);
}
}
sayHi();
A、"It worked! Hello world!" B、"Oh no an error: undefined" C、SyntaxError:can only throw Error objects D、"Oh no an error:Hello world!"
91、选择程序的输出结果:
function getInfo(member,year) {
member.name='Lydia';
year='1998'
}
const person={
name:'Alan'
}
const birthYear='1997';
getInfo(person,birthYear);
console.log(person,birthYear)
A、{name:'Lydia'},'1997' B、{name:'Sarah'},'1998' C、{name:'Lydia'},'1998' D、{name:'Sarah'},'1997'
92、从下列选项中选出输出结果:
const newArr=[1,2,3].map(n=>{
if(typeof n==='number') return;
return n*2;
})
A、[] B、[null,null,null] C、[undefined,undefined,undefined] D、[3 x empty]
93、说出下面的打印值:
const firstPromise=new Promise((res,rej)=>{
setTimeout(res,500,'one')
});
const secondPromise=new Promise((res,rej)=>{
setTimeout(res,100,'two')
});
Promise.race([firstPromise,secondPromise]).then(res=>{
console.log(res)
})
A、one B、two C、two,one D、one,two
94、说出下面的输出结果:
function sayHi(){
console.log(name);
console.log(age);
var name='Lydia';
let age=21;
}
A、Lydia 和undefined B、Lydia 和ReferenceError C、ReferenceError和21 D、undefinede和undefined
95、选择代码执行后的打印结果:
for(var i=0;i<3;i++){
setTimeout(()=>{
console.log(i);
},1)
}
for(let i=0;i<3;i++){
setTimeout(()=>{
console.log(i);
},1)
}
A、0,1,2和0,1,2 B、0,1,2和3,3,3 C、3,3,3和0,1,2
96、说出函数执行后的调用结果:
const shape={
radius:10,
diameter(){
return this.radius*2
},
perimeter:()=>2*Math.PI*this.radius
}
console.log(shape.diameter());
console.log(shape.perimeter());
- A、20and 62.83185307179586
- B、20和NaN
- C、20和63
- D、NaN和63
97、下列选项中哪一个描述是正确的:
const bird={
size:'small'
}
const mouse={
name:'Micky',
small:true
}
A、mouse.bird.size是无效的 B、mouse[bird.size]是无效的 C、mouse[bird['size']]是无效的 D、以上三个选项都是有效的
98、说出打印值的输出结果:
async function getData(){
return await Promise.resolve("I made it!");
}
const data=getData();
console.log(data);
A、'I made it!' B、Promise { :'I made It!'} C、Promise{ } D、undefined
99、说出下面构造函数的输出结果:
class Chameleon{
static colorChange(newColor){
this.newColor=newColor;
return this.newColor;
}
constructor({newColor='green'}={}){
this.newColor=newColor;
}
}
const freddie=new Chameleon({
newColor:'purple'
})
freddie.colorChange('orange')
A、orange B、purple C、green D、TypeError
100、说出下面的打印输出结果:
function Person(firstName,lastName) {
this.firstName=firstName;
this.lastName=lastName;
}
const lydia=new Person('Lydia','Hallie');
const sarch=Person('Sarch','Smith');
console.log(lydia);
console.log(sarch);
A、Pseron {fistName:'Lydia',lastName:'Hallie'} and undefined B、Person {firstName:'Lydia',lastName:'Hallie'} and Person {firstName:'Sarah',lastName:'Smith'} C、Person {firstName:'Lydia',lastName:'Hallie'} and {} D、Person {firstName:'Lydia',lastName:'Hellie'} and ReferenceError
部分题目参考:https://github.com/lydiahallie/javascript-questions/blob/master/zh-CN/README-zh_CN.md
原文链接:https://mp.weixin.qq.com/mp/homepage?__biz=MzI2NTQ5NTE4OA==&hid=7&sn=b6e703f14342dd6d416520b30bcb01f5&scene=25&uin=&key=&devicetype=Windows+10+x64&version=63020184&lang=zh_CN&ascene=1&session_us=gh_c36046921bbe&fontgear=1
作者:一只流浪的kk 出处:https://www.cnblogs.com/jjgw/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留原文链接,否则将追究法律责任 |
微信扫一扫 |