JavaScript

该文档存放的只是 HTML 部分的问题,其中答案部分放在对应目录下的 questionsAndAnswers.md 文件中,答案部分也只是个人所做的答案,可能存在不正确的地方,欢迎大家共同讨论,找出一个完美的答案。希望大家能够多学一点知识,能够对面试有所有帮助。

0. this 指向性问题总结。下面代码中分别输出什么?

由于在很多地方都遇到了不同形式的this指向性问题,所以干脆在这里把我遇到的题目都总结一下,也是为了更加集中的复习。

// code 1
var length = 10;
function fn() {
    alert(this.length);
}
var obj = {
    length: 5,
    method: function() {
        fn();
    }
};
obj.method(); // ?

// code 2
var num = 100;
var obj = {
    num: 200,
    inner: {
        num: 300,
        print: function() {
            console.log(this.num);
        }
    }
};

obj.inner.print(); //?

var func = obj.inner.print;
func(); //?

obj.inner.print(); //?

(obj.inner.print = obj.inner.print)(); //?

// code 3
function foo() {
    console.log(this.a);
}
var obj2 = { a: 42, foo: foo };
var obj1 = { a: 2, obj2: obj2 };
obj1.obj2.foo(); // ?

var obj3 = { a: 2 };
foo.call(obj3); // ?

var bar = function() {
    foo.call(obj3);
};
bar(); // ?
setTimeout(bar, 100); // ?
bar.call(window); // ?

var obj4 = { a: 3, foo: foo };
obj2.foo(); // ?
obj4.foo(); // ?
obj2.foo.call(obj4); //?
obj4.foo.call(obj2); // ?

// code 4
function foo() {
    console.log(this.a);
}
var obj = {
    a: 2,
    foo: foo
};
var a = 'oops, global';
setTimeout(obj.foo, 100); // ?
obj.foo(); // ?

// code 5 (new绑定)
function foo(a) {
    this.a = a;
}
var bar = new foo(2);
console.log(bar.a); // ?

var obj1 = { foo: foo };
var obj2 = {};

obj1.foo(2);
console.log(obj1.a); // ?

obj1.foo.call(obj2, 3);
console.log(obj2.a); // ?

var bar = new obj1.foo(4);
console.log(obj1.a); // ?
console.log(bar.a); // ?

// code 6

function foo() {
    console.log(this.a);
}

var a = 2;

foo.call(null); // ?
var bar = foo.bind(null);
bar(); // ?
foo.apply(undefined); // ?

// code 7 箭头函数

function foo() {
    return a => console.log(this.a);
}

var obj1 = { a: 2 };
var obj2 = { a: 3 };
var bar = foo.call(obj1);
bar.call(obj2); // ?

1. 字符串实现倒序

2. 下面这段代码的执行结果是什么

for (var i = 1; i <= 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

继续问,怎么实现期望一共返回 1-5,5 个值,并且一秒返回一个值?

3. JavaScript 的数据类型有哪些?如何准确的检测数据类型?symbol 是什么?有什么作用?

4. 以下代码执行结果分别是什么

  • 3 + "3"
  • "23" > "3"
  • var b = true && 2;
  • "abc123".slice(2, -1)
  • "abc123".substring(2, -1)

5. 以下代码执行结果是什么

  • 1

      var foo = 1,
          bar = 2,
          j,
          test;
      test = function(j) {
          j = 5;
          var bar = 5;
          foo = 5;
      };
      test(10);
      console.log(foo); //
      console.log(bar); //
      console.log(j); //
    
  • 2

      for (var i = 0; i < 10; i++) {
          window.setTimeout(function() {
              console.log(i); // 
          }, 100);
      }
      console.log(i); //
    
  • 3

      var length = 10;
      function fn() {
          alert(this.length);
      }
      var obj = {
          length: 5,
          method: function() {
              fn();
          }
      };
      obj.method(); //?
    
  • 4

      function Foo() {
          this.value = 42;
      }
      Foo.prototype = {
          method: function() {
              return true;
          }
      };
      function Bar() {
          var value = 1;
          return {
              method: function() {
                  return value;
              }
          };
      }
      Foo.prototype = new Bar();
      console.log(Foo.prototype.constructor); //
      console.log(Foo.prototype instanceof Bar); //
      var test = new Foo();
      console.log(test instanceof Foo); //
      console.log(test instanceof Bar); //
      console.log(test.method()); //
    
  • 5

      if (!('sina' in window)) {
          var sina = 1;
      }
      console.log('sina:', sina); //
    

    考察: 声明的提升

  • 6

      var t1 = new Date().getTime();
      var timer1 = setTimeout(function() {
          clearTimeout(timer1);
          console.info('实际执行延迟时间:', new Date().getTime() - t1, 'ms'); //
      }, 500);
    

    需要查看setTimeout的运行机制。考察:异步运行机制。

  • 7

      function SINA() {
          return 1;
      }
      var SINA;
      console.log(typeof SINA); //
    

    考察: 重复声明

  • 8

var sinaNews = {
    name: 'sinNewsName',
    test: function() {
        console.log('this.name:', this.name, '//');
    }
};
setTimeout(sinaNews.test, 500); //

考察:回调函数丢失 this 绑定

6. 如何对数组进行排序?如:[2, [1,2], 3, "2", "a", "b", "a", [1, 2]],重排序后[2, [1, 2], 3, "2", "a", "b"]

7. 要给羡慕所有的 li 元素保定 click 时间,在鼠标点击每个 li 的时候 alert 该 li 里面的内容;且在鼠标离开外部 ul 元素范围的时候弹出一个 alert 提示、(实现时请注意代码执行小路及浏览器兼容性,不要使用现成的框架库,用原生 js 编写完成)

<ul id='ulItem'>
    <li>内容1</li>
    ......此处省略1000+个li对象(注:不要使用循环绑定,如果使用循环绑定1000+的绑定事件会很慢)......
    <li>内容n</li>
</ul>

8. 下面代码打印出什么?

const a = 2;
console.log(a); // ?
a = 3; //?

9. 下面代码分别输出什么?

function foo() {
    'use strict';
    console.log(this.a);
}

function bar() {
    console.log(this.a);
}

var a = "this is a 'a'";

bar(); // ?
foo(); // ?

10. 根据以下代码,写出结果

// 第一组
alert(a);
a();
var a = 3;
function a() {
    alert(10);
}
alert(a);
a = 6;
a();

//------------分割线------------------
// 第二组
alert(a);
a();
var a = 3;
var a = function() {
    alert(10);
};
alert(a);
a = 6;
a();

11. 给出一个字符串,找到里面重复最多的字符?

12.写一个函数实现n!

13. 下面写出答案

a = 1;
b = 1;
a == b; // ?
name1 = { a: 1 };
name2 = { a: 1 };
name1 == name2; //?

14. 给一个<div>添加点击事件的方法?

15. ajax 中有 3 个请求,如何顺序实现这 3 个请求?

17. 数组的哪些操作会改变数组?

18. 事件代理的原理,请使用原生 js 实现一个

19. 请说明下列方法功能:

  • push
  • pop
  • shift
  • unshift
  • sort
  • reverse
  • splice

20. apply 和 call 的作用和区别?

21. 写一个函数递归调用的例子

22. 写出下列代码的运行结果:

var a = 1;
function main() {
    alert(a);
    var a = 2;
    alert(this.a);
}
main();

23. 参数传递中引用和复制的区别?

23. 函数传递参数时,参数的获取方法?

this.argments 的相关问题

24. es6 的特性有什么?

25. 箭头函数相对于普通函数有什么优点?

26. for-of 的原理?

27. 迭代器是什么?

生成器返回的是迭代器。

28. for in 和 for of 的区别是什么?

29. 简述 arguments 的作用,在 es6 中更好的替代方案是什么?

30. 实现一个动物类,动物有吃饭,吼叫的方法,有眼睛、鼻子属性。动物类有子类:猫和狗。猫的叫声是喵喵,猫的眼睛是蓝色的,狗得见叫声是汪汪,狗的眼睛是棕色的。请用代码实现上述描述。

32. 下面代码运行的结果是什么?

let obj = {
    fun1: () => {
        console.log('111');
    },
    fun2: () => {
        this.fun1();
    }
};

obj.fun2();

33. 下面代码会输出什么?

let arr = [1, 2, 3, 4];
let it1 = arr[Symbol.iterator](); // 遍历器接口
let res = it1.next();
console.log(res);

下面部分考察的是 setTimeoutpromise

31. 下面的执行结果是什么?

function Promise1() {
    return new Promise(function(resolve, reject) {
        for (let i = 0; i < 2; i++) {
            console.log('111');
        }
        resolve(true);
    });
}
function Promise2() {
    return new Promise(function(resolve, reject) {
        for (let i = 0; i < 2; i++) {
            console.log('222');
        }
        resolve(true);
    });
}

setTimeout(function() {
    console.log('333');
}, 0); // 这是是会执行的。考察的是异步执行,js的任务队列

Promise.all([Promise1(), Promise2()]).then(function() {
    console.log('All Done!');
});

34. 下面代码输出什么? ?

题目 1

Promise.resolve(1)
    .then(x => x + 1)
    .then(x => {
        throw new Error('my error');
    })
    .catch(() => 1)
    .then(x => x + 1)
    .then(x => console.log(x))
    .catch(console.error);

题目 2

// Qunar.com
setTimeout(() => {
    console.log(1);
}, 0);

new Promise(resolve => {
    console.log(2);
    resolve();
    console.log(3);
}).then(() => {
    console.log(4);
});

console.log(5);

题目 3

var p1 = new Promise(function(resolve, reject) {
  setTimeout(() =>reject(new Error('p1 中failure')) , 3000);
})

var p2 = new Promise(function(resolve, reject){
  setTimeout(() => resolve(p1), 1000);
});
var p3 = new Promise(function(resolve, reject) {
  resolve(2);
});
var p4 = new Promise(function(resolve, reject) {
  reject(new Error('error  in  p4'));
});

1. p3.then(re => console.log(re)); //?
2. p4.catch(error => console.log(error));//?

3. p2.then(null,re => console.log(re));//?
4. p2.catch(re => console.log(re));//?

题目 4

var p1 = Promise.resolve(1);
var p2 = new Promise(resolve => {
    setTimeout(() => resolve(2), 100);
});
var v3 = 3;
var p4 = new Promise((resolve, reject) => {
    setTimeout(() => reject('oops'), 10);
});

var p5 = new Promise(resolve => {
    setTimeout(() => resolve(5), 0);
});
var p1 = Promise.resolve(1);
Promise.race([v3, p1, p2, p4, p5]).then(val => console.log(val)); //?
Promise.race([p1, v3, p2, p4, p5]).then(val => console.log(val)); // ?
Promise.race([p1, p2, p4, p5]).then(val => console.log(val)); // ?
Promise.race([p2, p4, p5]).then(val => console.log(val)); //?

35. 说一下对 Promise 的理解?

40. promise 能够一直.then 下去的原因?

49. 如何用原生来实现 promise.all()?

36. 回调地狱的缺点?


37. 一个列表中给每项添加点击事件,如何添加?当列表有一万项的时候怎么添加?(事件委托是什么)做过的项目中 react-native 中的表格是怎么添加点击事件的?

38. 原型链是什么?说一下原型链的 this 指针指向?

39. 继承有几种方式?写一下

// -------------------打印分界线-----------------------

41. 有一个场景,我们有很多以前的代码,都是回调函数的形式写的。如何将 callback 形式的回调函数转化为 promise 的调用方式?

42. let const var 的区别?

const obj = {a: 1};那么 a 还能赋值为其他值吗?为什么?

43. 写一个函数,实现对象的深度拷贝。

44. 给一个字符串,找到里面重复最多的字符?

45. 一个列表很长,如何自己实现一个滚动条?

46. 简单点的,一个div方块如何移动?css3 方式,js 方式呢?用 js 如何实现 1s 动一下的效果?

47. 页面上一个可以触摸的方块,如何让其跟着这手指的移动而移动?手机触屏事件了解多少?

48. 定时有几种方式?


Qunar.com

50. 如何实现一下 Object.create()?

51. js 的路由是如何实现的?

52. 对 websocket 的理解?

53. 对 Pure functions(纯函数)的理解?

54. js 单线程的理解?

55. 如何用 promise 和 setTimeout 实现一个 delay 函数,.then 里面可以正常完成 promise 的一些后续操作?

// delay函数是这样的
delay(1000).then();

56. array、null、object 数据如何判断?

57. 写出下列代码的执行结果

1.

var a = 1;
b = function(x) {
    x && a(--x);
};
alert(a); // ? 1

2.

if (!('a' in window)) {
    var a = 2;
}
alert(a); // undefined

3.

function a() {
    return 1;
}
var a;
alert(a); // 显示function a () {return 1;}

4.

function a() {
    return 1;
}
var a = 1 && 2;
alert(a); // 2

5.

function a() {
    alert(this); // 全局对象window
}
a.apply(null);

sougou.com

58. es6 中的 Map 结构

1. es6 为什么推出 Map 结构?

59. 说一说 es5 中 object 是如何存储的?

var name = 'hehe';
var age = 27;
var job;
var arr = [1, 2, 3, 4];
var obj = { name: 'hehe', age: 27 };

这些都是  如何存储的?


百度-17 年上半年

60. 判断是否是回文

61. 为什么for-in不适合遍历数组?

62. JavaScript 如何判断一个对象是空的?


63. js 的作用域是什么?作用域是什么时候确定的?

64. setTimeout 和 promise 的区别?宏任务和微任务是什么?有什么区别?

65. 构造函数是什么?new 的时候都去做了什么?

66. String 和 string 有什么区别?

String 是构造函数,而"string"是变量的一种类型

typeof String; // "function"
typeof string; // "undefined"
typeof 'string'; // "string"

67. es6 和 commonjs 的 import 有什么区别

68. js的顶级对象是什么

69. instanceof是做什么的? Array instanceof Object是什么?Array是谁new出来的

70. 高阶函数是什么

results matching ""

    No results matching ""