【前端笔试之输入输出问题汇总】系列1

1、题目1:涉及到new Array()以及map方面的一些特性

const array = new Array(5).map((item) => {
    return item = {
        name: '1'
    }
})
console.log(array)//[empty*5]

一般我们认为会输出['name','name','name','name','name']。但是输出的却是empty。

  • 因为new Array(5)生成的数组在每一项都没有值,意思就是生成了[,,,,]这样的一个数组。
    let obj = new Array(5);
    console.log(obj)//[,,,,]
    
  • map依次为数组中的每个元素调用一次提供的callback函数,然后根据结果构造一个新的数组。map函数的回调函数只会被赋过值的项调用。new Array(1) [undefined]不一样。new Array(1)没有为数组中的项赋过值,而[undefined]为数组中的项赋了一个undefined值。

2、闭包问题

var myObject = {
    foo: "1",
    func: function () {
        var foo = "2";
        var self = this;
        console.log(this.foo);//1
        console.log(self.foo);//1
        return function () {
            console.log(this.foo);//undefined
            console.log(self.foo);//1
        };
    }
};
(myObject.func())();//1 1 undefined 1 
  • 后两个的this指向的window,而selfthis保存下来了,所以依旧是myObject

3、原型链

Object.prototype.a = function () {
   console.log('Object')
}
Function.prototype.a = function () {
    console.log('Function')
}
function F() { }
var f = new F();
f.a();//Object

4、map+parseInt()

   let list = [1, 2, 3].map(parseInt);
   console.log(list)//1 NaN NaN NaN 
  • [‘1’,‘2’,‘3’].map(parseInt) 就是将字符串1,2,3作为元素;0,1,2作为下标分别调用 parseInt 函数。即分别求出 parseInt(‘1’,0), parseInt(‘2’,1), parseInt(‘3’,2)的结果。
  • parseInt函数(重点)
    • 概念:以第二个参数为基数来解析第一个参数字符串。
    • 特点:接收两个参数parseInt(string,radix)

['1','2','3'].map(parseInt)即
parseInt(‘1’,0);radix 为 0,parseInt() 会根据十进制来解析,所以结果为 1;
parseInt(‘2’,1);radix 为 1,超出区间范围,所以结果为 NaN;

parseInt(‘3’,2);radix 为 2,用2进制来解析,应以 0 和 1 开头,所以结果为 NaN。

5、三等号赋值

let obj = {
   num1: 117
}
let res = obj;
obj.child = obj = { num2: 935 };
var x = y = res.child.num2;
console.log(obj.child);//undefined
console.log(res.num1);//117
console.log(y);//935

第一步:
在这里插入图片描述
第二步:
对于 var a=b=1 这样的赋值,只声明第一个变量,不声明后面的,然后从右往左赋值,也就是 var a;b=1;a=b;
在这里插入图片描述
(欧科)

6、 异步任务队列

document.getElementById('btn').style = 'background:blue';
console.log(1)
Promise.resolve().then(() => {
    console.log(3)
    document.getElementById('btn').style = 'background:black';
})
document.getElementById('btn').style = 'background:red';
console.log(2)
//1,2,3

页面的按钮最终显示是黑色

7

let a = 1;
setTimeout(() => a = 0, 3000);
while (a) { }
console.log(a)//什么也不会输出

8、如何让两个NaN相等

console.log(NaN==NaN);//false
console.log(NaN.toString(), NaN.toString())//true
console.log(Object.is(NaN, NaN))//true

9

new Promise((resolve, reject) => {
   reject(20);
})
    .then(
        data => {
            console.log(2);
        },
        data => {
            console.log(3);
        }
    )
    .then(
        data => {
            console.log(4);
        },
        data => {
            5;
        }
    );
//输出3、4

因为reject之后,确实promise的状态已经变成了rejected,但是再.then之后,p的状态是fulfilled。

let p = new Promise((resolve, reject) => {
    reject(20);
})
    .then(
        data => {
            console.log(2);
        },
        data => {
            console.log(3);
        }
    )
console.log('p1=>', p)
p.then(
    data => {
        console.log('p2=>', p)
        console.log(4);
    },
    data => {
        5;
    }
);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值