问题14:下面代码输出什么?
  var bar = true;
  console.log(bar + 0);
  console.log(bar + "xyz");
  console.log(bar + true);
  console.log(bar + false);
  输出是
  1
  truexyz
  2
  1
  下面给出一个加法操作表
  Number + Number -> 加法
  Boolean + Number -> 加法
  Boolean + Boolean -> 加法
  Number + String -> 连接
  String + Boolean -> 连接
  String + String -> 连接

  问题15:下面代码输出什么?
  var z = 1, y = z = typeof y;
  console.log(y);
  输出是 undefined。js中赋值操作结合律是右至左的 ,即从右边开始计算值赋值给左边的变量。
  上面代码等价于
  var z = 1
  z = typeof y;
  var y = z;
  console.log(y);

  问题16:下面代码输出什么?
  var foo = function bar(){ return 12; };
  typeof bar();
  输出是抛出异常,bar is not defined。如果想让代码正常运行,需要这样修改代码:
  var bar = function(){ return 12; };
  typeof bar();
  或者是
  function bar(){ return 12; };
  typeof bar();
  明确说明这个下问题
  var foo = function bar(){
  // foo is visible here
  // bar is visible here
  console.log(typeof bar()); // Work here : )
  };
  // foo is visible here
  // bar is undefined here

  问题17:两种函数声明有什么区别?
  var foo = function(){
  // Some code
  };
  function bar(){
  // Some code
  };
  foo的定义是在运行时。想系统说明这个问题,我们要引入变量提升的这一概念。
  我们可以运行下如下代码看看结果。
  console.log(foo)
  console.log(bar)
  var foo = function(){
  // Some code
  };
  function bar(){
  // Some code
  };
  输出为
  undefined
  function bar(){
  // Some code
  };
  为什么那?为什么 foo 打印出来是 undefined,而 bar打印出来却是函数?
  JavaScript在执行时,会将变量提升。
  所以上面代码JavaScript 引擎在实际执行时按这个顺序执行。
  // foo bar的定义位置被提升
  function bar(){
  // Some code
  };
  var foo;
  console.log(foo)
  console.log(bar)
  foo = function(){
  // Some code
  };
  原代码的输出合理解释了。

  问题18:下面代码输出什么?
  var salary = "1000$";
  (function () {
  console.log("Original salary was " + salary);
  var salary = "5000$";
  console.log("My New Salary " + salary);
  })();
  输出是
  Original salary was undefined
  My New Salary 5000$
  这题同样考察的是变量提升。等价于以下代码
  var salary = "1000$";
  (function () {
  var salary ;
  console.log("Original salary was " + salary);
  salary = "5000$";
  console.log("My New Salary " + salary);
  })();

  问题19:什么是 instanceof 操作符?下面代码输出什么?
  function foo(){
  return foo;
  }
  console.log(new foo() instanceof foo);
  instanceof操作符用来判断是否当前对象是特定类的对象。
  如
  function Animal(){
  //或者不写return语句
  return this;
  }
  var dog = new Animal();
  dog instanceof Animal // Output : true
  但是,这里的foo定义为
  function foo(){
  return foo;
  }
  所以
  // here bar is pointer to function foo(){return foo}.
  var bar = new foo();
  所以 new foo() instanceof foo 返回 false

  问题20: 如果我们使用JavaScript的”关联数组”,我们怎么计算”关联数组”的长度?
  var counterArray = {
  A : 3,
  B : 4
  };
  counterArray["C"] = 1;
  其实答案很简单,直接计算key的数量可以了。
  Object.keys(counterArray).length // Output 3
  面试题参考自: 21 Essential JavaScript Interview Questions | Codementor
  本文给出的面试题答案只是很多合理答案中的几个,可能会不全面,欢迎大家补充。