「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
- 请问0.1+0.2等于多少?
答案:0.30000000000000004
解析:由于以下两个原因,导致0.1 + 0.2 != 0.3
1.在十进制转换为二进制的过程中,会产生精度的损失
2.二进制浮点数进行对阶运算时,也会产生精度的损失
- 下面代码的执行结果是什么?
function foo(str){
'use strict';
eval(str);
console.log(a);
}
foo('var a = 1')
答案:ReferenceError:a is not defined
解析:在严格模式下,eval运行时有其自己的词法作用域,意味着其中的声明无法修改所在的作用域
- 下面说法正确的是(多选)
A.直接调用Math.Max时它并不接受数组
B.对于系统内置对象,使用toString不会得到想要的结果,而是[object Objcet]
C.函数中的length属性返回函数中的形参个数
D.arguments对象用于描述传递给函数的参数的类数组对象
答案:ABCD
- 如何遍历对象身上的属性,非原型继承而来的属性?
答案:可通过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})
- 下面代码的执行结果是什么?
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
- 执行下面代码,当用于点击页面中的“按钮”时,会打印出什么?
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
- 下面代码的执行结果是什么?
var a = [1]
var b = ['2']
console.log(b - a)
答案:1
解析:考查减号运算符,如果减号两边都是数组,且两个数组都只有一个成员,且此成员是数字或者是数字字符串,就会将里头的当数字相减