1.什么是 undefined x 1 ?

在chrome下执行如下代码,我们就可以看到undefined x 1的身影。

var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];
console.log(trees);

当我们使用 delete 操作符删除一个数组中的元素,这个元素的位置就会变成一个占位符。打印出来就是undefined x 1
注意如果我们使用trees[3] === 'undefined × 1'返回的是 false。因为它仅仅是一种打印表示,并不是值变为undefined x 1

  • 用户: 流浪小黄人 时间: 2018-12-13 12:16

    这个题第一次遇到,不错!
  • 用户: 明皈依 时间: 2019-01-08 10:14

    活到老,学到老
  • 用户: 凉城旧梦 时间: 2019-03-27 17:31

     ["redwood", "bay", "cedar", empty, "maple"]不是打印出这个吗
  • 用户: 岳静阁 时间: 2019-04-04 14:09

    打印之后的而结果是["redwood", "bay", "cedar", empty, "maple"] ; trees[3]是empty
  • 用户: 陳仙森 时间: 2019-04-10 00:19

    ["redwood", "bay", "cedar", empty, "maple"]

2.下面代码输出什么?

var trees = ["xyz","xxxx","test","ryan","apple"];
delete trees[3];
  
console.log(trees.length);

输出是5。因为delete操作符并不是影响数组的长度。

  • 用户: gao 时间: 2019-04-08 19:47

    5
  • 用户: 多看点书 时间: 2019-04-21 11:01

    5 ['xyz','xxxx','test','','apple']

3.下面代码输出什么?

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 -> 连接

    4.下面代码输出什么?

    var z = 1, y = z = typeof y;
    console.log(y);
    输出是 undefined。js中赋值操作结合律是右至左的 ,即从最右边开始计算值赋值给左边的变量。

    上面代码等价于

    var z = 1
    z = typeof y;
    var y = z;
    console.log(y);  


      5.下面代码输出什么?

      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
      • 用户: Gazer_S 时间: 2018-12-31 14:44

        牛逼
      • 用户: 岳静阁 时间: 2019-04-04 15:05

        首先区分函数声明和函数表达式,函数声明是以function开头的;var foo = function bar(){ return 12; };属于函数表达式;bar相当于在函数作用范围内存储一个bar的变量,foo对象的name属性就指向此变量;所以在外部是访问不到bar的;

      6.两种函数声明有什么区别?

      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
      }; 
      

      原代码的输出合理解释了。


      • 用户: IseeU 时间: 2019-04-16 14:21

        学到了

      7.下面代码输出什么?

      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);
       })();
      • 用户: (*^_^*)⁶⁶⁶ 时间: 2019-04-18 18:47

        闭包里面重新定义了salary,再加上变量提示,所以salary为undefined,如果没重新定义,可以拿到外面的salary

      8.什么是 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

      • 用户: (*^_^*)⁶⁶⁶ 时间: 2019-02-21 10:43

        不太好理解
      • 用户: IseeU 时间: 2019-04-16 14:35

        意思是new了一次就不是原函数里的对象了,所以false是吧?
      • 用户: 多看点书 时间: 2019-04-21 11:14

        instanceof 是用来判断一个对象的原型链上是否有该对象的构造函数 左边是实例 右边是构造函数 且左侧是由右侧实例化出来的才可以 ture

      9.如果我们使用JavaScript的"关联数组",我们怎么计算"关联数组"的长度?

      var counterArray = {
          A : 3,
          B : 4
      };
      counterArray["C"] = 1;

      其实答案很简单,直接计算key的数量就可以了。

      Object.keys(counterArray).length // Output 3
      • 用户: 明皈依 时间: 2019-01-08 10:26

        学到了
      • 用户: ???????? 健 时间: 2019-03-16 22:04

        不错