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

posted @ 2021-04-19 11:33  二郎神杨戬  阅读(2481)  评论(0编辑  收藏  举报