美文网首页
基本类型

基本类型

作者: 小周师傅 | 来源:发表于2016-08-25 21:55 被阅读0次

    问题

    1.基础类型有哪些?复杂类型有哪些?有什么特征?

    • 基本类型:指简单的数据段,按值访问,可以操作保存在变量中的实际的值,有undefined,null,boolean,number,string
    • 引用类型:指由多个值构成的对象,按引用访问,有object,array,function
    • 复制变量:从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到新变量分配的位置上;当一个变量向另一个变量复制引用类型的值时,会将变量的指针复制一份到新变量分配的空间中,两个变量实际上引用的是同一个对象,改变其中一个变量,另一个也会受到影响。
    • 传递参数:ECMAScript中所有函数的参数都是按值传递的,向参数传递基本类型的值时,被传递的值会被复制给一个局部变量;向参数传递引用类型的值时,会将地址传递给局部变量,因此这个局部变量的变化会反映在函数的外部(例子如下)
    function addTen(num){
           num += 10;
           return num;
    }
    var count = 20;
    var result = addTen(count);
    alert(count);//20,没有变化
    alert(result);//30
    

    2.如下代码的输出? 为什么?

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);//false, obj1和obj2存放的地址不同
    console.log(obj1 = obj2);//object{a:1, b:2},将obj2的地址赋给obj
    console.log(obj1 == obj2);//ture,obj1和obj2存放的地址相同
    

    代码

    //写一个函数getIntv,获取从当前时间到指定日期的间隔时间
      var str = getIntv("2016-08-27");
            console.log(str);
            function getIntv(time) {
                var t1 = new Date(),
                    t2 = new Date(time),
                    t3 = t2 - t1;
                return "距XX还有" + Math.floor(t3 / (24 * 60 * 60 * 1000)) + " 天 " + Math.floor((t3 % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000)) + " 小时 " + Math.floor((t3 % (60 * 60 * 1000)) / (60 * 1000)) + " 分 " + Math.floor((t3 % (60 * 1000) / 1000)) +
                    " 秒";
            }
    
            //把数字日期改成中文日期
            function getChsDate(str) {
                var chsNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"],
                    arr = str.split('-'),
                    year = chsNum[arr[0][0]] + chsNum[arr[0][1]] + chsNum[arr[0][2]] + chsNum[arr[0][3]],
                    mon,
                    day;
                if (chsNum[arr[1][0]] === "零") {
                    mon = chsNum[arr[1][1]];
                } else if (chsNum[arr[1][1]] === "零") {
                    mon = "十";
                } else {
                    mon = "十" + chsNum[arr[1][1]];
                }
                if (chsNum[arr[2][0]] === "零") {
                    day = chsNum[arr[2][1]];
                } else if (chsNum[arr[2][1]] === "零") {
                    day = "十";
                } else {
                    day = chsNum[arr[2][0]] + "十" + chsNum[arr[2][1]];
                }
                return year + "年" + mon + "月" + day + "日";
            }
            var str1 = getChsDate('2016-08-10');
            var str2 = getChsDate('2016-12-25');
            var str3 = getChsDate('2016-10-05');
            console.log(str1);
            console.log(str2);
            console.log(str3);
    
    //写一个函数获取n天前的日期
    function getLastNDays(n) {
                var t1 = new Date(),
                    t2 = t1 - n * 24 * 60 * 60 * 1000,
                    lastDay = new Date(t2),
                    lastDayStr = lastDay.toLocaleDateString().split('/').join('-');
                return lastDayStr;
            }
            var lastWeek = getLastNDays(7);
            var lastMonth = getLastNDays(30);
            console.log(lastWeek);
            console.log(lastMonth);
    
    //完善如下代码,用于获取执行时间如:
      var Runtime = (function() {
                var t1, t2, t3; //code here ...
                var obj = {
                    start: function() {
                        t1 = Date.now(); //code here ..., 当前时间
                        return t1;
                    },
                    end: function() {
                        t2 = Date.now(); //code here ...  结束时间
                        return t2;
                    },
                    get: function() {
                        t3 = t2 - t1; //code here ...  获取执行时间
                        return t3;
                    }
                };
                return obj;
            }());
            Runtime.start();
            for (var i = 0; i < 100; i++) {
                console.log(i);
            } //todo somethint
            Runtime.end();
            console.log(Runtime.get());
    

    5.楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现

      function stepFloor(n) {
                if (n === 1) {
                    return 1;
                } else if (n === 2) {
                    return 2;
                } else {
                    return stepFloor(n - 1) + stepFloor(n - 2);
                }
            }
    

    6.写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项

      function jsonDeepCopy(json) {
                var newJson = {};
                for (var property in json) {
                    if (typeof json[property] === 'object') {
                        newJson[property] = jsonDeepCopy(json[property])
                    } else {
                        newJson[property] = json[property];
                    }
                }
                return newJson;
            }
            var jsonPerson = {
                "name": 'Jack',
                "age": 24,
                "family": {
                    "Fa": "Bob",
                    "Ma": "Lisa"
                }
            }
            console.log(jsonDeepCopy(jsonPerson));
    

    相关文章

      网友评论

          本文标题:基本类型

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