很多变态的好玩的前端面试题

1. javascript的 “;”导致的一个问题

function foo1()
{ 

  return { 

    bar: "hello" 

  };

} 

function foo2()

{ 

  return 

    { 

      bar: "hello" 

    };

}

const a = foo1();

const b = foo2();

console.log(a) //Object {bar: "hello"}

console.log(b) //underfind

2. 阿里面试题 ---- 分别用es6 和 es3 方式输出 1 2 3 done [1, 2, 3]      

const timeout = ms => new Promise((resolve, reject) => {

           setTimeout(() => {

              resolve();

           }, ms)

       })

       const ajax1 = () => timeout(2000).then(() => {

           console.log('1');

           return 1;

       })

       const ajax2 = () => timeout(1000).then(() => {

           console.log('2');

           return 2;

       })

       const ajax3 = () => timeout(2000).then(() => {

           console.log('3');

           return 3;

       })

       const mergePromise = ajaxArray => {

           // 在此处分别用es6 和 es3 方式输出 1 2 3 done [1, 2, 3]

       }



       mergePromise([ajax1, ajax2, ajax3]).then(data => {

           console.log('done');

           console.log(data);

       });



// es3

       const mergePromise = ajaxArray => {

           var arr = [],

              ajaxLen = ajaxArray.length;

           for (var i = 0; i< ajaxLen; i ++) {

              ajaxArray[i].next = ajaxArray[i + 1];

           }

           function todo (item) {

              item().then(data => {

                  arr.push(data);

                  var _next = item.next;

                  _next && todo(_next);

              })

           }



           todo.then = data => {

              ajaxArray[ajaxLen - 1].next = () =>

                  timeout(0).then(() => {

                     data(arr);

                  })

             

              todo(ajaxArray[0]);

           }

           return todo;

       }

// es6

       const mergePromise = ajaxArray => {

           let result = [];

           async function asyncForEach () {

              for (let item of ajaxArray) {

                  result.push(await item());

              }

              return result;

           }



           return asyncForEach();

       }

 

3. 在什么情况下“a == 2 && a == 3”的返回值是true

let i = 2;
Number.prototype.valueOf = function() {
    return i++;
};
let a = new Number( 42 );
if (a == 2 && a == 3) {
    console.log( true );
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值