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

    活到老,学到老

2.下面代码输出什么?

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

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

    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

          牛逼

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

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


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

            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

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

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

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

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

                学到了