美文网首页饥人谷技术博客
时间对象、引用类型

时间对象、引用类型

作者: TimeLesser | 来源:发表于2016-04-13 10:27 被阅读38次

    问题

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

    基本数据类型包括 Undefined 、 Null 、 Boolean 、 Number 和 String 。

    复杂类型包括 Object、 Array 、DateRegExp 、Function

    • 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
    • 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;
    • 引用类型的值是对象,保存在堆内存中;
    • 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;
    • 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
    • 确定一个值是哪种基本类型可以使用 typeof 操作符,而确定一个值是哪种引用类型可以使用instanceof 操作符

    代码

    1.写一个函数getIntv,获取从当前时间到指定日期的间隔时间

    var str = getIntv("2016-01-08");
    console.log(str);  // 距除夕还有 20 天 15 小时 20 分 10 秒
    
            // var str = getIntv("2016-01-08");
            // console.log(str);  // 距除夕还有 20 天 15 小时 20 分 10 秒
            function getIntv(argument) {
                var time=Date.parse(argument),now=Date.now(),min=time-now-8*60*60*1000;
                min=min>0?min:-min;
                day=Math.floor(min/86400000);
                hour=Math.floor(min/3600000-day*24);
                mins=Math.floor(min/60000-hour*60-day*24*60);
                s=Math.floor(min/1000-mins*60-hour*60*60-day*24*60*60);
    
                if ((time-now)>0) {
                    console.log('距'+argument+'还有 '+day+'天'+ hour+'小时' + mins+'分'  +s+'秒' );
                    
                }
                else {
                    console.log('距'+argument+'过去了 '+day+'天'+ hour+'小时' + mins+'分'  +s+'秒' );
                }
                
            }
             getIntv("2016-04-08");
    

    2. 把数字日期改成中文日期

    var str = getChsDate('2015-01-08');console.log(str); // 二零一五年一月八日
    
    // 把数字日期改成中文日期
        // var str = getChsDate('2015-01-08');
        // console.log(str);  // 二零一五年一月八日
        function getChsDate(str) {
            var Num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
            var Name = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
            var arrs = str.split('-');
    
            function toArr(arri) {
                var arr = [
                    [],
                    [],
                    []
                ];
                for (var i = 0; i < arri.length; i++) {
                    for (var j = 0; j < arri[i].length; j++) {
                        arr[i].push(Name[arri[i][j]]);
                    }
                }
                return arr;
    
            }
            arrs = toArr(arrs);
            console.log(arrs);
    
            function cutdown(arr) {
    
                switch (arr[0]) {
                    case Name[0]:
                        arr.splice(0, 1);
                        break;
                    case Name[1]:
                        arr.splice(0, 1, '十');
                        break;
                    case Name[2]:
                        arr.splice(1, 0, '十');
                        break;
                }
    
                return arr;
            }
            for (var i = 1; i < arrs.length; i++) {
                arrs[i] = cutdown(arrs[i]);
            }
    
            arrs[0].push('年');
            arrs[1].push('月');
            arrs[2].push('日');
    
            var newstr = '';
            for (var i = 0; i < arrs.length; i++) {
                newstr += arrs[i].join('');
            }
    
            console.log(newstr);
    
        }
    
        getChsDate('2015-11-28');
    

    3.写一个函数获取n天前的日期

    var lastWeek = getLastNDays(7); // ‘2016-01-08’
    var lastMonth = getLastNDays(30); //'2015-12-15'
    
    //写一个函数获取n天前的日期
        var lastWeek =  getLastNDays(7); 
        var lastMonth = getLastNDays(30);
        function getLastNDays(num) {      
            var day=new Date(Date.now()-num*24*3600*1000);
            year=day.getFullYear();
            mouth=day.getMonth()+1;
            date=day.getDate();
            var arr=[year,mouth,date];
            return str=arr.join("-");      
            }
             
      
        console.log(lastWeek);
        console.log(lastMonth);
    

    4.完善如下代码,如:

    var Runtime = (function(){
        //code here ...
        return {
            start: function(){
                  //code here ...
            },
            end: function(){
                 //code here ...
            },
            get: function(){
                 //code here ...
            }
        };
    }());
    Runtime.start();
    //todo somethint
    Runtime.end();
    console.log(  Runtime.get() );
    
     var Runtime = (function() {
            var startTime;
            var endTime;
            var passTime;
            return {
                start: function() {
                    startTime = Date.now();
                    return startTime;
                },
                end: function() {
                    endTime = Date.now();
                    return endTime;
                },
                get: function() {
    
                    passTime = (endTime - startTime) / 1000;
                    return '程序运行耗时 ' + passTime + ' s';
                }
            };
        }());
        Runtime.start();
        function fn(num) {
            if (num==0||num==1) {
                return 1;
            }
            else {
                return fn(num-1)+fn(num-2);
            }
        }
        console.log(fn(40)) ;
        Runtime.end();
        console.log(Runtime.get()); //程序运行耗时 1.757 s
    
        Runtime.start();
        var f=[];
        function count(num) {
            f[1]=1;
            f[2]=2;
            for (var i = 3; i < num+1; i++) {
                f[i]=f[i-1]+f[i-2];
            }
            return f[num];
        }
        console.log(count(90));
        Runtime.end();
        console.log(Runtime.get());//程序运行耗时 0 s
    

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

    递归实现

    function fn(num) {
            if (num==0||num==1) {
                return 1;
            }
            else {
                return fn(num-1)+fn(num-2);
            }
        }
    console.log(fn(20));
    

    非递归实现

    var f=[];
        function count(num) {
            f[1]=1;
            f[2]=2;
            for (var i = 3; i < num+1; i++) {
                f[i]=f[i-1]+f[i-2];
            }
            return f[num];
        }
        console.log(count(20));
    

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

    function jsonDeepCopy(json) {
            var newjson = {};
            for (i in json) {
                if (typeof json[i] === 'object') {
                    newjson[i] = jsonDeepCopy(json[i]);
                } else {
                    newjson[i] = json[i];
                }
            }
            return newjson;
        }
        json1 = {
            name: 'John',
            age: 34,
            boolean: true,
            hobby: {
                food: 'water',
                color: 'red'
            }
        };
        var json2 = jsonDeepCopy(json1);
        console.log(json2);
        json2.hobby.color = 'blue';
        console.log(json2);
        console.log(json1);
    

    7.写一个数组深拷贝的方法,数组里的值可以是字符串、数字、布尔、数组中的任意项目

    function arrDeepCopy(arr) {
            var newarr = [];
            for (i in arr) {
                if (arr[i] instanceof Array) {
                    newarr[i] = arrDeepCopy(arr[i]);
                } else {
                    newarr[i] = arr[i];
                }
            }
            return newarr;
        }
        arr1 = [
        'John',
        34,
        true,
        ['water','red']
        ]
    
        var arr2 = arrDeepCopy(arr1);
        console.log(arr2);
        arr2[3][1] = 'blue';
        console.log(arr2);
        console.log(arr1);
    

    8.写一个深拷贝的方法,拷贝对象以及内部嵌套的值可以是字符串、数字、布尔、数组、json对象中的任意项

    function DeepCopy(obj) {
            var newobj = {};
            for (i in obj) {
                if (typeof obj[i] === 'object') {
                    newobj[i] = (obj[i] instanceof Array) ? [] : {};
                    newobj[i] = DeepCopy(obj[i]);
                } else {
                    newobj[i] = obj[i];
                }
            }
            return newobj;
        }
        json1 = {
            name: 'John',
            age: 34,
            boolean: true,
            hobby: {
                food: 'water',
                color: 'red'
            },
            arr: ['arr1', 'arr2']
        };
        var json2 = DeepCopy(json1);
        console.log(json2);
        json2.hobby.color = 'blue';
        json2.arr[0] = 'newarr';
        console.log(json2);
        console.log(json1);
    

    相关文章

      网友评论

        本文标题:时间对象、引用类型

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