美文网首页
WY-javascript练习收集

WY-javascript练习收集

作者: ddai_Q | 来源:发表于2015-07-29 19:31 被阅读3276次

    类型系统


    1、以下表达式返回的值是多少?

    “1”-null+true
    

    答案: 2

    2、type([])的结果是?

    • A “Object”
    • B “Function”
    • C “Array”
    • D “object”

    答案: D

    3、以下表达式返回的结果是false的有?

    • A (function(){}).constructor == Object
    • B [].constructor == Array
    • C true.constructor == Boolean
    • D (1).constructor == Number

    答案: A (Function)

    4、以下语句执行后,a的值不是undefined的有?

    • A var a = (function(b){return b;})();
    • B var a = document.getElementById('notExistElement');
    • C var o = {x:1};var a = o.y;
    • D var a

    答案: B (null)

    知识点
    undefined 出现场景:
    已声明未赋值的变量
    获取对象不存在的属性
    无返回值的函数的执行结果
    函数的参数没有传入
    void(express)

    5、实现type函数用于识别标准类型和内置对象类型,语法如下:

    var t = type(obj)

    答案:

    function type(obj){
        return  Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
    }
    

    内置对象


    1、以下代码执行完成后president.name的值是

    function setName(obj){
        obj.name = "obama";
        obj = {name:"clinton"};
    }
    var president = {name:"bush"};
    setName(president);
    
    • A."clinton"
    • B.undefined
    • C."obama"
    • D."bush"

    答案:C

    2、以下代码执行后a、b的值分别是?

    var str = "welcome to NetEase!welcome to MOOC!";
    var a = str.indexOf("to");
    var b = str.indexOf("to", a+1);
    

    答案:8,27

    3、以下代码执行后ret和arr的值分别是?

    var arr=[1,2,"a","b"];
    var ret=arr.splice(1,2,3);
    

    答案:
    ret : [2,"a"]
    arr : [1,3,"b"]

    知识点
    splice() 方法 向/从数组中添加/删除项目,然后返回被删除的项目。
    注释:该方法会改变原始数组。
    语法:arrayObject.splice(index,howmany,item1,.....,itemX)

    4、以下表达式返回结果是?

    parseInt("10.1",16)
    
    • A.16
    • B.10
    • C.10.1
    • D.8

    答案: A

    5、表达式 "1+1".replace("1","2") 返回结果是?

    答案:2+1

    知识点
    replace(str1,str2)方法替换的只是第一个匹配的字符串


    如果想要替换全部,可以使用正则。(但这种正则表达式是有局限的)
    var str = "男的女的老的少的";
    alert(str.replace(new RegExp(/(的)/g),''));


    匹配的是一些特定的字符串,如何匹配动态的字符串呢?
    var replaceStr = "的";
    alert(str.replace(new RegExp(replaceStr,'gm'),''));
    这样我们就完成了匹配字符串的动态赋值。


    另外还有其他的方法实现全部替换
    alert(str.split(replaceStr).join(''));

    6、(/^abc/i).test("Abc123")的结果是?

    答案:true

    7、var obj = Object.create({a:1}); obj.hasOwnProperty('a')返回结果是___?

    答案:false ( - a是对象原型连上的属性)

    知识点
    Object.create(proto[,propertisObject])
    是基于原型对象创建新对象


    Object.prototype.hasOwnproperty判断一个属性是否是对象自身属性

    表达式与运算符


    1、代码执行后a,b的值分别是多少?

    var a = 0
    var b = true || a++
    

    答案: 0,true

    2、代码执行后a,b的值分别是多少?

    var a = 0
    var b = true && a++
    

    答案: 1,0

    3、一些表达式返回结果为true的有:?

    • A Number("a") == NaN
    • B false =="0"
    • C "123" == 123
    • D new String("123") =="123"

    答案: BCD

    知识点补充
    类型转换例外情况:
    null == undefined //true
    null或undefined参与进行==运算时不进行隐式类型转换
    0 == null //false
    null == false //false
    "undefined" == undefined //false

    变量作用域


    1、以下代码执行时两个alert的值是多少?

    (function(){
       a = 5;
       alert(window.a)
       var a = 10;
       alert(a)
     })()
    

    答案:undefined 10

    2、以下代码执行时alert的值是多少?

    var a = 6;
    (function(){
       alert(window.a)
           alert(a)
       var a = 10;
       alert(a)
     })()
    

    答案:6 undefined 10

    3、以下代码执行时两个alert的值是多少?

    var a = 6;
    (function(){
           alert(a)
     })()
    

    答案:6

    4、以下代码执行时alert的值是多少?

    var x = 10;
    function foo(){
        alert(x);
    }
    function bar(){
        var x = 20;
        foo();
    }
    bar();
    

    答案:10

    知识点1
    用词法环境进行分析

    知识点2
    JS使用动态作用域
    JS没有块级作用域
    JS函数运行在他们被定义的作用域里
    catch语句可以临时改变js变量作用域

    闭包

    1、以下代码执行时alert的值是多少?

    var a=1;
    var func = (function(){
        var a=2;
        return function(){
            a++;
            alert(a)
        }
    })()
    func();
    func();
    

    答案:3,4

    面向对象


    1、eval函数中的this值是?

    答案:调用上下文的this

    2、下列关于js描述正确的有?

    • A js中可以使用prototype实现原型继承
    • B 在对象构造器中,可以使用this创建对象的属性
    • C js中不能使用面向对象
    • D js中不能给未定义的变量赋值

    答案:AB

    3、使用 new Function()创建的函数代码中this是全局对象?

    • A js中可以使用prototype实现原型继承
    • B 在对象构造器中,可以使用this创建对象的属性
    • C js中不能使用面向对象
    • D js中不能给未定义的变量赋值

    答案:AB

    4、使用new Function()创建的函数代码中的this是全局对象?

    • A 错误
    • B 正确

    答案:B
    例如:

       var foo3 = new Function('var temp = 100; console.log(this); this.temp = 200; return temp + this.temp;');
      //this 指window对象
    

    4、JS中所有函数都可以当成构造器?

    • A 错误
    • B 正确

    答案:A

    5、以下代码用于判断user对象就有自身属性name?
    user.______('name')

    答案:hasOwnProperty

    5、以下代码alert的值依次是?

    function Teacher(){}
    
    Teacher.prototype = {
        job : 'teacher',
        setName : function(name){
            this.name = name
        }
    }
    
    var bill = new Teacher()
    bill.setName('Bill')
    alert(bill.name) //Bill
    alert(bill.job) //teacher
    
    bill.job = 'assistant';
    alert(bill.job) //assistant
    delete bill.job;
    alert(bill.job); //teacher
    

    答案:Bill teacher assistant teacher

    6、写代码

    Object.create
    if( typeof Object.create != 'function'){
    
        Object.create = function(obj){
            if( typeof obj != 'object' ){
                throw TypeError('Object prototype may only be an Object or null')
            }
            var r = function(){}
            r.prototype = obj
            return new r;  //new r() 与new r 没有区别,只是r函数没有参数时,括号可以省略
        }
    
    }
    
    var a = Object.create({x:1,y:2})
    alert(a.x)
    

    综合


    1、写代码

    题目

    答案:

    function myType(param){
        alert("I am an " + Object.prototype.toString.call(param).slice(8, -1) )
    }
    

    2、写代码

    题目
    function search(arr,dst){
        var type = Object.prototype.toString.call(arr).slice(8,-1);
        if(type != 'Array'){
            throw TypeError('Object prototype may only be an Array')
        }
        var len = arr.length;
        if( !len){
            return -1;
        }
    
        var l = 0;
        var h = len - 1;
        while(l <= h){
            var m = Math.floor( (h+l)/2 );
            if( arr[m] == dst ){
                return m;
            }else if( dst < arr[m] ){ //左半部分
                h = m - 1;
            }else{ //右半部分
                l = m + 1;
            }
    
        }
    }
    var arr = [1,2,4,6,7,9,19,20,30,40,45,47];
    alert( search(arr,45) )
    

    相关文章

      网友评论

          本文标题:WY-javascript练习收集

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