每天前端题整理及其我的答案-5

78 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

  1. 请问0.1+0.2等于多少?

答案:0.30000000000000004
解析:由于以下两个原因,导致0.1 + 0.2 != 0.3
1.在十进制转换为二进制的过程中,会产生精度的损失
2.二进制浮点数进行对阶运算时,也会产生精度的损失

  1. 下面代码的执行结果是什么?
function foo(str){
    'use strict';
    eval(str);
    console.log(a);
}
foo('var a = 1')

答案:ReferenceError:a is not defined
解析:在严格模式下,eval运行时有其自己的词法作用域,意味着其中的声明无法修改所在的作用域

  1. 下面说法正确的是(多选)

A.直接调用Math.Max时它并不接受数组
B.对于系统内置对象,使用toString不会得到想要的结果,而是[object Objcet]
C.函数中的length属性返回函数中的形参个数
D.arguments对象用于描述传递给函数的参数的类数组对象
答案:ABCD

  1. 如何遍历对象身上的属性,非原型继承而来的属性?

答案:可通过for in 循环遍历出所有属性,再通过对象身上的hasOwnProperty()判断遍历出来属性是对象身上的还是原型上的,代码如下

**

function fn(obj) {
    if(typeof obj === 'object'){
        //不考虑数组
        for (const key in obj) {
            if (Object.hasOwnProperty.call(obj, key)) {
                console.log(key)
            }
        }
    }else{
        return
    }
}
fn({a:1})
  1. 下面代码的执行结果是什么?
var obj = {
    foo: 'bar',
    fn: function () {
        var self = this;
        console.log(this.foo, self.foo);//
        (function () {
            console.log(this.foo, self.foo);//undefined bar
        }());
    }
}
obj.fn();

答案:bar bar undefined bar
解析:obj.fn执行时,fn里面this指向调用者obj,而当fn里头的立即执行函数执行时,里面的this指向window

  1. 执行下面代码,当用于点击页面中的“按钮”时,会打印出什么?
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)
}

答案:每个按钮被点击时,都会打出一个5
解析:在点击之前,for循环已经执行完,当这个时候访问i时,已经变成了5

  1. 下面代码的执行结果是什么?
var a = [1]
var b = ['2']
console.log(b - a)

答案:1
解析:考查减号运算符,如果减号两边都是数组,且两个数组都只有一个成员,且此成员是数字或者是数字字符串,就会将里头的当数字相减