美文网首页
面向对象有关的面试题总集0318

面向对象有关的面试题总集0318

作者: Ainy尘世繁花终凋落 | 来源:发表于2017-03-18 22:06 被阅读0次

    面试的笔试题:

    考察知识:toString()方法 返回一个对象的字符串描述

    0

    <script>
    var a = {};
    var b = {name:'张飒'};
    var c = {};
    //设置c的属性
    c['a'] = 'testa';
    c['b'] = 'testb';
    c[a] = 'TEXTA';//c[{}.toString()]
    c[b] = 'TEXTB';//c[{name:'张三}.toString()]
    
    console.log(c.a);//testa
    console.log(c.b);//testb
    console.log(c[a]);//TEXTB  //c[b] = 'TEXTB',将c[a] = 'TEXTA';覆盖了,所以为TEXTB
    console.log(c[b]);//TEXTB
    console.log(c['a']);//testa
    console.log(c['b']);//testb
    
    console.log(a.toString());//'{}'[object Object]  //[对象类型 构造函数]
    console.log(b.toString());//[object Object]
    
    </script>
    

    1

    <script>
        function foo(){
            var num = 123;
            console.log(num);
        }
        foo();//123
        console.log(num);//报错
    
        </script>
    

    2

    <script>
        //var scope;声明提前
        /* function foo() {
            console.log(scope);
            scope = 'local';
            console.log(scope);
        }*/
        var scope = 'global';
    
        foo();//global    local
        function foo(){
            console.log(scope);//global
            scope = 'local';
            console.log(scope);//local
        }
        console.log(scope);//local
    </script>
    

    3

    <script>
        //全局变量自动生成window的属性
     /*   function f1(){
            //var a;
            if('a' in window){
                var a = 10;
            }
            console.log(a);//undefined
        }
        f1();//undefined*/
    
      /*  //var a;
        if('a' in window){
            var a = 10;
        }
        console.log(a);//10*/
    
        //var a;
        if(!'a' in window){
            var a = 10;
        }
        console.log(a);//undefined
    </script>
    

    4

    <script>
        //var foo;
        /*function bar(){
            var foo;
            if(!foo){
                foo = 10;
            }
            alert(foo);
        }*/
        //foo = 1;
        var foo = 1;
        function bar(){
            var foo;
            if(!foo){//true
                foo = 10;
            }
            alert(foo);
        }
        bar();//10
    </script>
    

    5

     <script>
        function Foo(){
            getName = function (){
                console.log('1');
            };
            return this;
        }
        //此处的this指向window
        /*console.log(Foo());*/
        /*function Foo.getName(){
            console.log('2');
        };与下面的表达式等价*/
        Foo.getName = function (){
            console.log('2');
        };
        Foo.prototype.getName = function (){
            console.log('3');
        };
        var getName = function (){
            console.log('4');
        };
        function getName(){
            console.log('5');
        };
    
        Foo.getName();//2
        getName();//4
        Foo().getName();//1            //window.getName();  1
        getName();//1
        new Foo().getName();//3   //先计算new Foo()为一个新创建的对象,  对象.方法
        new new Foo().getName();//3//先计算new Foo().getName()为3,然后再new 3 为3;
    </script>
    

    6

     <script>
    var getName;
    function Foo() {
         getName = function(){
             console.log("1");
    };
    return this;
    }
    
    Foo.getName = function() {
           console.log("2");
    };
    Foo.prototype.getName = function(){
          console.log("3");
    };
    
    getName = function() {
            console.log("4");
    };
    
    Foo.getName(); //   2
    getName(); //   4
    Foo().getName(); //  1
    
    </script>
    

    7

    01 以下创建对象的方法,错误的是:

    <script>
    
    var obj1 = new Object();
    obj1.name = "XMG";
    obj1.getName = function () {
        return this.name;
    }
    console.log(obj1.getName());
    </script>
    <script>
    var obj2 = {
        name:"XMG",
        getName:function () {
            return this.name;
        }
    }
    console.log(obj2.getName());
    </script>
    <script>
    var MYClass = function () {
    // function MYClass () {
        this.name = "XMG";
        this.getName = function () {
            return this.name;
        }
    };
    
    var obj3 = new MYClass();
    console.log(obj3.getName());
    </script>
    <script>
    var obj4;           //undefiend
    obj4.name = "XMG";
    obj4.getName = function () {
        return this.name;
    };
    console.log(obj4);
    

    </script>

    02 请给出以下代码的打印结果
    变量和函数的提升(函数和变量同名

    <script>
    function test() {};
    console.log(typeof test);   //?  function ?string
    var test = "2017";
    console.log(typeof test);
    </script>
    

    03 请给出以下代码的输出结果

    <script>
    
    //1 - true
    //0 -false
    //负数 -  false
    var f = new Object(-2);
    if (f == true) {
        var a = 10;
    }
    
    function fn() {
        var b = 20;
        c = 30;
    }
    
    fn();
    console.log(a);  //?  10 ? undefined ?
    //    console.log(b);  //?   报错 ? 20
    //    console.log(c);   //30 ?
    
    </script>
    

    04 请给出下面代码的输出结果
    即时函数
    变量声明的提升

    <script>
    var name = 'World!';
    (function () {
        if (name == undefined) {    //undefied    "undefined"
            name = '文顶顶';
            console.log('Goodbye ' + name);
        } else {
            console.log('Hello ' + name);
        }
    })();
    
    </script>
    

    05 请给出下面代码的结果
    输出的结果是

    <script>
    console.log(Array.isArray(Array.prototype));
    //    console.log(Array.prototype);
    //console.log(Object.prototype.toString.call(Array.prototype));
    </script>
    

    06 请给出下面代码的输出结果
    不要死记硬背(==)判断的时候内部会进行类型的转换(如果比较的两个数据类型不一样)

    <script>
    var a = [0];
    if (a) {
    
        //console.log([0] == true);
        console.log(a == true);   //true
    } else {
        console.log("NO");
    }
    console.log("___");
    // NO ? true ? false
    </script>
    

    07 请给出下面代码的输出结果

    <script>
    (function(){
        //var x = y = 1;  //
        //y = 1;  全局变量
        //var x = 1;
    
    
        var x ,y = 1;
        //var x;
        //var y = 1;
        console.log(x);
    })();
    
    //    console.log(y); //能够获取y的值吗?  可以
    //    console.log(x); //能够获取x的值吗?  不可以
    </script>
    

    08 请给出下面代码的输出

    <script>
    console.log("++++++++++++++++++");
    var a = {}, b = Object.prototype;
    //    console.log([a.prototype === b, Object.getPrototypeOf(a) === b]);
    
    //a是一个对象,有构造函数Object,构造函数有自己的原型对象Object.prototype
    //对象的原型对象是自己构造函数的原型对象 a.__proto__ == Object.prototype
    console.log(a.prototype);//Object.prototype
    console.log(a.prototype === b);                           //true
    
    
    //Object.getPrototypeOf(a) 获得的是a的原型对象(构造函数的原型对象)
    console.log(Object.getPrototypeOf(a) === b);                //true
    
    //A [false true]
    //B [false false]
    //C [true  true]
    //D [true false]
    
    </script>
    

    09 请给出下面代码的输出结果

    <script>
    
    function f() {}
    var a = f.prototype;     //空对象    此处的f为函数
    var b = Object.getPrototypeOf(f); //此处的f为对象  //f.__proto__ 它的构造函数的原型对象 就是Function的prototype 是空函数
    
    console.log(a === b);     //false
    //    console.log(a,b);
    console.log(b == f);   //空函数 == 空函数 ?  函数是对象(引用地址)//false
    console.log(f.__proto__);//空函数
    
    </script>
    

    10 请给出下面代码的输出结果

    <script>
    
    function foo() { }
    var oldName = foo.name;   //函数的名字foo
    foo.name = "bar";         //这样修改没有效果  name在此处并不只是一个普通的属性,而是函数的名称
    //    bar();
    
    
    //    console.log(oldName);
    //    console.log(foo.name);
    //
    console.log(oldName === foo.name);      //true
    console.log([oldName, foo.name]);       //foo foo
    </script>
    

    11 请给出输出结果

    <script>
    
    function f() {}
    var parent = Object.getPrototypeOf(f);  //Function.prototype 空函数
    
    console.log(f.name);                    // f
    console.log(parent.name);               // 空
    
    //A "f", "Empty"  正确  (!)
    //B "f", undefined
    
    //空函数的name属性的值是空字符串 并非是undefined
    console.log((function () {
    
    }).name);
    </script>
    

    相关文章

      网友评论

          本文标题:面向对象有关的面试题总集0318

          本文链接:https://www.haomeiwen.com/subject/tempnttx.html