考验JavaScript基本功的几道题

    最近无聊,在网上搜了很多关于原生JavaScript的题目,一般不容易做对,稍稍做下总结!

    1.NaN==NaN?

    答: false。(isNaN方法可以判断是否为NaN)

          考点:NaN是什么。它“not a number”的缩写,{},""等都可以是一个NaN,所以NaN!=NaN。

          拓展:typeof NaN——指是number;NaN+1——NaN。

    注:null == undefined

  2.

        var a=10;                   /*定义全局变量a的值为10*/
        console.log(sayHi());      //NaN
        function sayHi () {
            var a=a+10               /*定义局部变量a,函数内a被重新定义,此时a不是数字*/
return a; /*return值为NaN
}
console.log(sayHi()+10) // NaN
console.log(a) // 10 /*此时指全局变量a*/

      3.

        var foo = {
            bar: function() { return this.baz; },
            baz: 1
        };
        console.log(
            (function(){
                return typeof arguments[0]();
            })(foo.bar)
        )                                                  //undefined

 

          考点:this指针。改写以上函数:

       var foo = {
            bar: function() { return this.baz; },
            baz: 1
        };
        console.log(
            (function(){
                return typeof arguments[0]();
            })(function() { return this.baz; })
        ) 

           this指向arguments,那么baz这个属性是arguments所没有的,因此他的值为undefined。         

      4.

        var x=1
        if (function fn() {}) {
            x+=typeof fn;
        };
        console.log(x)       //1undefined

               考点:a.function() fn{}是一个函数声明,fn此时没有定义,则为undefined。若var fn=function(){},则结果为1function;b.数字+str则是把数字与str连写成字符串;c.Boolean(function fn() {})值为true,即函数转换为布尔值都是true。

       5.

console.log((function f () {
            function f () {
                return 1;
            }
            return f();
            function f () {
                return 2
            }
            function f () {
                return 3
            }
        })())                               //3            

           6.arguments(实参)

        console.log(
            (function () {
            return typeof arguments;
        })()
        )                                  //object

              考点:typeof 只能识别除Null之外的标准类型及函数类型,其他都识别为object。

    7.

        var f = function g () {
            return 23;
        }
        console.log(typeof g())                 //报错

              考点:本题是一个指定了函数名的函数表达式。首先执行一个抽象方法NewDeclarativeEnvironment,该方法创建一个空的新词法环境,并把 当前的执行环境 引用为 新的词法环境的外部词法环境。然后以新的词法环境为作用域,执行了接下来的步骤,并             最后将函数的引用交给左侧的变量。因此这里的函数名,是绑定在新的词法环境中的,外部环境也就无法找到函数名,抛出了ReferenceError

            8.delete

        console.log(
            (function (x) {
                delete x;
                return x;
            })(1)
        )

             考点:在函数内部,delete无法删除形参。

           9.var y=1,x=y=typeof x;

        var y=1,x=y=typeof x;
        console.log(x)             //undefined
        console.log(y)             //undefined

             考点:先定义了 y 并赋值为 1,然后将 typeof x 赋值给 y ,此时 x 未定义,故为 "undefined",最后将 y 的值赋给 x。

           10.

            (function f(f){
                return typeof f();
            })(function(){ return 1; })           //执行结果为 number

               考点:一个函数名为f的自执行函数,接收一个函数作为参数。函数f内部的f则指向传入的实参而非函数f自身。

          11.逗号运算符

           var f = (function f(){
return "1";
},
function g(){
return 2;
})();
typeof f; //number

                   考点:“,“运算符的规则是:先计算左边的再计算右边的,最后返回右边的。

          12.

         var x = [typeof x, typeof y][1];
         typeof typeof x;

                    考点: typeof的返回值为的类型为string

          13.

        console.log(
            (function(foo){
                return typeof foo.bar;
            })({ foo: { bar: 1 } })
        )                                                  //undefined

                  考点:此题与题10类似,函数内部的foo指向实参,arguments是没有bar这个属性的。此题的实参foo等于{ foo: { bar: 1 } }

         14.

with (function(x, undefined){}) length                                              //2

                   考点:with只起一个临时改变作用域的作用,相当于function(x,undefined){}.length。对于函数对象,length属性对应的是参数个数,即为2.

         15.

        function f(){ return 1; }
        console.log(new f() instanceof Object)                       //true
        function f(){ return f; }
        console.log(new f() instanceof Function)                     //true

                考点:“a instanceof b”指a是否是b的实例。构造函数不需要显式声明返回值,默认返回this值。当显式声明了返回值时,如果返回值是非对象(数字、字符串等),这个返回值会被忽略,继续返回this值。但是如果返回值是对象,那么这个显式返回值会            被返回。

posted @ 2016-03-22 16:19  3408GoGoGo  阅读(403)  评论(0编辑  收藏  举报