zoukankan      html  css  js  c++  java
  • 考验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值。但是如果返回值是对象,那么这个显式返回值会            被返回。

  • 相关阅读:
    C:把算术表达式分成Token
    JavaScript数据结构——链表的实现与应用
    JavaScript数据结构——队列的实现与应用
    JavaScript数据结构——栈的实现与应用
    由“RangeError: Invalid status code: 0”错误所引发的思考
    工作是最好的投资——图书摘录
    Node.js在指定的图片模板上生成二维码图片并附带底部文字说明
    苹果手机对网页上样式为position:fixed的弹窗支持不好的解决办法
    自定义react数据验证组件
    Ubuntu 18.04中截图工具Shutter的编辑按钮不可用的解决办法
  • 原文地址:https://www.cnblogs.com/july-Vivian/p/5306566.html
Copyright © 2011-2022 走看看