k8w.io
JavaScript基础面试题
2018-04-18作者:k8w

我们是国内最早使用TypeScript进行全栈开发的团队。
目前正在招聘优秀的前后台及全栈工程师。
这是我整理的一些有关JavaScript基础的面试题,如果你有兴趣欢迎发送简历到me@k8w.io

第 1 题

请写出以下代码的运行结果,并解释原因。

let a = 123;
let b = 'TEST';
let c = [10,20,30];
let d = {
  value: 'AAA'
}

function test(a, b, c, d){
  a += 100;
  b += '666';
  c[0] = 999;
  d.value = 'DDD';
}
test(a, b, c, d);
console.log(a, b, c, d);

第 2 题

请写出以下代码的运行结果,并解释原因

for(var i = 0; i < 10; ++i){
  setTimeout(function(){
    console.log(i);
  }, 1000)
}

第 3 题

请写出以下代码的运行结果,并解释原因

let a = {
  value: 'AAA',
  show: function(){
    console.log(this.value)
  }
};

let b = {
  value: 'BBB',
  show: a.show
}

a.show();
b.show();

第 4 题

请为Array新增一个unique方法,作用是去除数组里重复的项,例如:

let a = [1, 1, 2, 2, 3, 3];
console.log(a.unique());    // [1, 2, 3]

第 5 题

请写出下面代码的运行结果,并解释原因?

let a = {
  value: 'AAA'
};
a.show1 = function(){
  console.log(this.value);
}
a.show2 = ()=>{
  console.log(this.value)
}
a.show1();
a.show2();

第 6 题

请实现以下代码需要的 waitOneSecond 方法:

async function test(){
  console.log('A');

  //等待1秒
  await waitOneSecond();

  console.log('B');
}

第 7 题

有异步方法 task 如下,需要顺序执行N个异步步骤 testA -> testB -> … -> testN

async function task(){
  await testA();
  await testB();  // 可能抛出异常
  await testC();
  // ...
  await testN();
}

已知在 testB 中可能抛出异常,请优化 task 方法,实现:
当 testB 抛出异常时,不再执行后续步骤,立刻将 task 方法返回

第 8 题

同上题,优化 task 方法,改实现为:当 testB 遇到异常,将错误信息console.log出来,继续执行后续步骤

第 9 题

假设有数组 arr,记录了一份订单列表,格式如下

let arr = [
  { name: "Lisa", value: 190 },
  { name: "Rose", value: 150 },
  { name: "Lisa", value: 290 },
  { name: "Marry", value: 370 },
  // ...
]

请写一段代码,计算每个 name 对应所有记录的value总和,将它们输出为一个Object,例如:

{
  "Lisa": 480,
  "Rose": 150,
  "Marry": 370
}

(尽可能用更少的代码)

第 10 题

下列代码可能有什么问题?应该如何解决?

let a = 0.1;
let b = 0.2;
let c = 0.3;
if(a + b == c){
  console.log('OK');
}

第 11 题

有A, B两个数组,它们的格式如下:

let A = [
  { date: '2017-05-01', value: 100 },
  { date: '2017-05-02', value: 150 },
  // ...
];

let B = [
  { date: '2017-05-01', value: 120 },
  { date: '2017-05-03', value: 140 },
  // ...
];

A和B中只有一部分的日期是相同的,请你写一段代码,计算每一天A+B的结果,如果某一天A或B没有数据,则视为value为0,输出例如:

[
  { date: '2017-05-01', value: 220 },  // 2017-05-01 A=100 B=120 A+B=220
  { date: '2017-05-02', value: 150 },  // 2017-05-02 A=150 B无数据视为0 A+B=150
  { date: '2017-05-03', value: 140 },  // 2017-05-03 A=无数据 B=140 A+B=140
  // ...
]
(正文完)
标签:JavaScript
留言(2条)
Herenxiaode 说:
大佬请看看我的作业有没有问题, 答案唯一的就不写了, 后端没用过的也懒得临时搭一个去学, 关于效率问题请看看这样可不可以. //================================== //4: let a = [1, 1, 2, 2, 3, 3]; a.unique=function(){ for(var o={},s=0;s<this.length;s++)o[this[s]]=1; return Object.keys(o); } console.log(a.unique()); //678:后端?的话没用过. //9:原理同4 let arr = [ { name: "Lisa", value: 190 }, { name: "Rose", value: 150 }, { name: "Lisa", value: 290 }, { name: "Marry", value: 370 }, // ... ] for(var o={},s=0;s<arr.length;s++)o[arr[s].name]=(o[arr[s].name]||0)+arr[s].value; //10: let a = 0.1; let b = 0.2; let c = 0.3; if(a*10 + b*10 == c*10){ console.log('OK'); } //10:原理同4 let A = [ { date: '2017-05-01', value: 100 }, { date: '2017-05-02', value: 150 }, // ... ]; let B = [ { date: '2017-05-01', value: 120 }, { date: '2017-05-03', value: 140 }, // ... ]; for(var o={},s=0;s<A.length;s++)o[A[s].date]=(o[A[s].date]||0)+A[s].value; for(s=0;s<B.length;s++)o[B[s].date]=(o[B[s].date]||0)+B[s].value; console.dir(o);//只取A+B结果的话到此为止. var O=[]; for(var k in o)O.push({'date':k,'value':o[k]});
2019-05-11 04:25 | 1楼 | 回复
Herenxiaode 回复 1楼 Herenxiaode
失礼了,异步在前端也有.
2019-05-11 23:30 | 2楼 | 回复
发表新留言
您的大名:
必填
电子邮箱:
不公开,仅用于向你发送回复