前段面试题题目

题目1:

// a在什么条件下成立
var a = ? 
if (a == 1 && a == 2 && a == 3) {
   console.log('条件成立')
}

方法1

// 使用toString
var a = {
    i: 0,
    toString() {
        return ++this.i;
    }
}
if (a == 1 && a == 2 && a == 3) {
    console.log('条件成立')
}

方法2

// 数据劫持实现
var i = 0;
Object.defineProperty(window, 'a', {
   get() {
       return ++i;
   }
})
if (a == 1 && a == 2 && a == 3) {
   console.log('条件成立')
}

方法3

var a = [1,2,3]
a.toString = a.shift
if (a == 1 && a == 2 && a == 3) {
    console.log('条件成立')
}

题目2

var x = 20;
var a = {
    x : 15,
    fn : function(){
        var x = 30;
        return function(){
            return this.x;
        };
    }
};
console.log(a.fn());
console.log((a.fn())());
console.log(a.fn()());
console.log(a.fn()() == (a.fn())());
console.log(a.fn().call(this));
console.log(a.fn().call(a));
//function(){return this.x;}
//20 
//20
//true
//20
//15

题目3(同步与异步)

Promise.resolve().then(()=>{
  console.log('Promise1')
  setTimeout(()=>{
    console.log('setTimeout2')
  },0)
})

setTimeout(()=>{
  console.log('setTimeout1')
  Promise.resolve().then(()=>{
    console.log('Promise2')
  })
},0)
//Promise1 -> setTimeout1 -> Promise2 -> setTimeout2

题目4(同步与异步)

console.log('begin')
setTimeout(()=>{
  console.log('a');
  Promise.resolve().then(()=>{
    console.log('b');
    setTimeout(()=>{
      console.log('c');
      var arr1 = [];
      console.log(arr1 instanceof Array)
    });
  }).then(()=>{
    console.log('d');
  });
},0);
console.log('e')

题目5:下面代码,浏览器控制台上会打印什么?

var a = 10;
function foo(){
	console.log(a)
	var a = 20;
}
foo()

题目6:如果我们使用let或const代替var,输出是否相同

var a = 10;
function foo(){
	console.log(a)
	var a = 20;
}
foo()

题目7:有以下两个函数,定义一个对象使其拥有这两个函数属性。

function mobile(){
	return  'mobile';
}
function phone(){
    return 'phone';
}
var a = {};
a.mobile = mobile();
a.phone = phone();
console.log(a);

题目8:(考察了对象变量和堆内存)

var a = {n:10,m:20};
var b = a;
b.n = 30;
console.log(a.n);
console.log(b);

题目9:6、编写一个函数fn(Number n),将数字转为大写输出,如输入123,输出一百二十三。

function fn(n){
    if(!/^([1-9]\d*)/.test(n)){
        return '非法数据';
    }
    var unit = '千百十亿千百十万千百十个';
    if(n.length > unit.length){
        return '数据过长';
    }
    var newStr = '';
    var nlength = n.length;
    unit = unit.substr(unit.length - nlength);
    for(var i = 0; i < nlength; i++){
        newStr += '零一二三四五六七八九'.charAt(n[i]) + unit.charAt(i);
    }
    newStr = newStr.substr(0,newStr.length-1);
    newStr = newStr.replace(/零(千|百|十)/g,'零').replace(/(零)+/g,'零').replace(/零(亿|万)/g,'$1');
    return newStr;
}
console.log(fn('205402002103'));

算法考察:

  1. 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?

    首先分为6组跑一次,6次
    A1 A2 A3 A4 A5 A6
    B1 B2 B3 B4 B5 B6

    每组的第一都跑一次, 一共为7次,取前三名,暂定为(A1 B1 C1),此时第一名已经定了为A1

    那么其他三个组D组 E组 F组肯定直接被淘汰,因为他们的第一名都跑不进前三,所以不用考虑改组的其他赛车

    接着ABC组缩小范围
    A组 A2 A3 参加比赛,因为只有A1作为参照物,而A1是冠军 所有它俩都机会,A1>A2>A3
    B组 B1 B2 参加比赛,B3跑输 B1 B2 ,B1跑输A1,因此B2之后的拿不到前三,A1>B1>B2
    C组 C1 参加比赛,同理,A1>B1>C1

    最后 A2 A3 B1 B2 C1 可以决出前三 ,总共为8次

  2. 一面墙,单独工作时,A花18小时砌好,B花24小时,C花30小时,现A, B, C的顺序轮流砌,每人工作1小时换班,完工时,B总共干了多少小时?()
    A. 9小时
    B. 8小时
    C. 7小时
    D. 6小时48分
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值