• 前端笔试题总结,带答案和解析(一)



    1. 执行以下程序,输出结果为()

    var x = 10;
    var y = 20;
    var z = x < y ? x++:++y;
    console.log('x='+x+';y='+y+';z='+z);
    
    • 1
    • 2
    • 3
    • 4

    A x=11;y=21;z=11
    B x=11;y=20;z=10
    C x=11;y=21;z=10
    D x=11;y=20;z=11

    初始化x的值为10,y的值为20,x < y返回结果为true,所以执行var z = x++,x++是后置自增,也就是先返回x值,然后再自增加1,所以输出x的值为11,z的值为10,而y值没有改变,仍然是20,B选项正确。


    2. typeof Date.now() 的值是:'number'

    先执行 Date.now() 得到一个时间戳 typeof 时间戳 =》‘number’


    3. 请阅读以下代码
    var obj = {};
    obj.log = console.log;
    obj.log.call(console,this);
    
    • 1
    • 2
    • 3

    该代码在浏览器中执行,输出的日志结果是什么?

    A undefined
    B window
    C console
    D obj

    obj.log = console.log;//在本行中obj对象中创建了一个函数(即console.log)的引用log,因为是个这个函数的引用如果想要执行可以有两种方法,第一种是后边加(),第二种是使用apply()或者call(),二者第一个参数都是this,接下来的参数apply是参数数组或者是"arguments",而call的参数是直接的参数值
    obj.log.call(console,this);//如上所述,call的第二个参数是要被传入obj.log()的参数,这行代码其实可等价于console.log(this),而因为这三行代码都是在global环境下定义的(不是函数中的局部变量),所以this就是window.
    至于第一个参数为什么是console而不是this,我觉得console被按照this处理了,我试了试,替换后的执行结果相同


    4.执行以下代码,alert的输出结果为()
     var msg = 'hello';
    for (var i = 0; i<10; i++){
        var msg = 'hello' + i * 2 + i;
    }
    alert(msg);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    答案:hello189

    解析:在for循环内使用var声明的变量msg并不是局部变量,而是全局变量。在for循环中,每循环一次,变量msg的值就被覆盖一次, 当i=10时不满足i<10,则不执行for里面的逻辑,所以最后一次i=9,最终msg的值为表达式‘hello’ + 9 * 2 + 9的返回结果,根据运算符的优先级,先计算9 * 2,返回结果为18,接着运算hello + 18,返回结果为字符串类型的hello18,最后运算hello18 + 9,返回结果为字符串类型的hello189,故输出结果为hello189,B选项正确。

    “hello”+9*2+9
    “hello”+18+9
    “hello18”+9
    “hello189”


    5.下列逻辑表达式的结果为false的是()
    A NaN == NaN

    B null == undefined

    C ‘’ == 0

    D true == 1

    答案:A

    解析:
    A选项,NaN无论与谁比较,包括它自己,结果都是false,A正确;
    B选项,null与undefined使用 ‘ == ’ 比较,结果为true,除此之外,undefined和null与谁比较,结果都为false;
    C选项,String与Number比较,先将String转为Number类型,再比较,''转为Number类型的结果为0,故 ‘’ == 0的结果为true;
    D选项,Boolean与其他类型比较,Boolean先转为Number类型,true转为Number类型的值为1,故true==1的结果为true。


    6.已知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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    A newArr.indexOf(arr[i]) == -1

    B !newArr.indexOf(arr[i]) == -1

    C newArr.includes(arr[i])

    D !newArr.includes(arr[i])

    解析:
    indexOf()方法与includes()方法的一个重要区别在于indexOf()并不能判断数组的NaN元素,换句话说,不管数组arr是否有NaN元素,arr.indexOf(NaN)返回值都是-1,所以AB选项不能对NaN进行去重,不符合题意;
    如果newArr数组不含有arr数组的某个元素,就应该把该元素添加到newArr数组中,如果含有,则不能添加,这样才能达到去重的目的,即newArr.includes(arr[i])返回值为false时,就应该执行if内的语句,所以应该使用“!”对条件取反,D选项符合题意,C选项不符合题意。


    7. 执行以下程序,输出结果为()
    var one;
    var two = null;
    console.log(one == two,one === two);
    
    • 1
    • 2
    • 3

    答案:true,false
    解析:变量one只声明未赋值,所以其值为undefined,在使用 “ == ” 对undefined和null进行比较时,不能将null和undefined转换成其他任何值,并且规定undefined == null返回结果为true,而使用“ === ”进行比较时,由于“===”需要严格区分数据类型,故undefined === null返回结果为False,A选项正确。


    8. 如下代码片段的运行结果是
    var obj ={a:1,b:function () {alert(this.a)}}; 
    var fun =obj.b; 
    fun()
    
    • 1
    • 2
    • 3

    答案:弹出undefined
    解析:var b = function(){ alert(this.a); }, obj = { a:1, b:b // 把函数独立出来 }; var fun = obj.b;// 存储的是内存中的地址 fun(); 答案:C 虽然fun是obj.b的一个引用,但是实际上,它引用的是b函数本身,因此此时的fun()其实 是一个不带任何修饰的函数调用,所以this指向window。


    9. 下面符合javascript变量定义规则的是?

    A _$te$t2
    B with
    C a bc
    D 2a
    答案:A
    解析: 第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字
    B中with是保留字,C中带空格,D不能以数字开头


    10 请问以下JS代码会输出什么
    var a = 10; 
    (function a() {
        a = 20;
        console.log(a); 
    })()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    答案:输出函数a的内容
    解析:首先存在变量提升和函数提升,所以一开始变量a被提升,值为undefined,由于函数可以在函数体中访问自己的标识符(函数名),而且函数提升优先级更高所以a先被赋值为函数。
    又因为是立即执行函数所以执行了函数a输出a目前的值(即函数),之后才是被赋值为10.


  • 相关阅读:
    用户空间协议栈设计和netmap综合指南
    AI绘图开源工具Stable Diffusion WebUI前端API对接
    git stash的使用方法
    关于小程序 scroll
    API接口文档1688阿里巴巴获取跨境属性数据
    『 C++类与对象』继承
    JSTL 标签库
    【LeetCode】【剑指offer】【顺时针打印矩阵】
    HFish蜜罐实践:网络安全防御的主动出击
    【Hack The Box】linux练习-- seal
  • 原文地址:https://blog.csdn.net/sinat_51673411/article/details/133546961