js时间对象、引用类型基础知识问答

一、问题

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

基础类型包括:Undefined,Number,String,Null,Boolean;
复杂类型包括:Object (对象,函数,数组,正则 等);

  • 基础类型的特征是保存在栈内存中,其是按值访问的,故而可以操作保存在变量中的实际的值;
  • 复杂类型的特征是保存在堆内存中,其是按指针访问的,故实际上在操作复杂类型的对象时实际上是操作对象的引用(指针),而非实际的对象;

下面举个例子:

Paste_Image.png
Paste_Image.png

正好在此补充两点知识:

  • 1、注意数组与字符串赋值的差异
Paste_Image.png
Paste_Image.png
  • 2、浅拷贝、深拷贝举例
    var obj1={"name":"licai" ,"age":24 ,"sex":"M"};
    function lowerCopy(obj) {
        var newObj={};
        for ( property in obj ){
             newObj[property]=obj[property];

        }
        return  newObj;
    }
浅拷贝
    var obj1={ "name":"licai" ,"age":24 ,"sex":"M", "like":["看书","写代码"] };
    function deepCopy(obj) {
        var newObj={};
        for ( property in obj ){
            if(typeof obj[property]==="object"){
                newObj[property]=deepCopy( obj[property] );
            }
            else {
                newObj[property]=obj[property];
            }

        }
        return  newObj;

    }
深拷贝

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

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); // false; obj1与obj2的指针不是一个 因此会报错
console.log(obj1 = obj2);//  将obj2的指针赋给obj1,返回Object 对象
console.log(obj1 == obj2); /*true;  由于经过赋值的运算,
obj2的指针现在与obj1是同一个,因此运算结果为真*/

二、代码

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(nowdate){
        var allDifference=Date.parse("2017-01-27")-Date.parse(nowdate);
        var dayConvert=1000*60*60*24;
        var hoursConvert=1000*60*60;
        var minutersConvert=1000*60;
        var secondsConvert=1000;
        var dayDifference= parseInt( allDifference/dayConvert );
        var hoursDifference= parseInt( (allDifference%dayConvert)/hoursConvert ) ;
        var minutesDifference=parseInt( allDifference%dayConvert%hoursConvert/minutersConvert );
        var secondsDifference=parseInt( allDifference%dayConvert%hoursConvert%minutersConvert/secondsConvert );
        var str="从"+nowdate+"距离2017年除夕"+"还有"+dayDifference+"天"+hoursDifference+"小时"+minutesDifference+"分钟"+secondsDifference+"秒";
        return str;
    }
Paste_Image.png

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

var str = getChsDate('2015-01-08');
console.log(str);  // 二零一五年一月八日
    function getChsDate(albDate) {
        var albDateArr=albDate.split("-");
        var zhNumberArr=['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'];
        var str0=albDateArr[0];
        var arr0=str0.split("");
        for (var j=0;j<=9;j++){
            arr0.forEach(function (e,i,arr0) {
                if (e==j){
                    arr0[i]=zhNumberArr[j];
                }
            })
        }
        var m=albDateArr[1];
        albDateArr[1]=zhNumberArr[Number(m)];
        var n=albDateArr[2];
        albDateArr[2]=zhNumberArr[Number(n)];

         str=arr0.join("")+"年"+albDateArr[1]+"月"+albDateArr[2]+"日";
        return str;

    }
Paste_Image.png

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

var lastWeek =  getLastNDays(7); // ‘2016-01-08’
var lastMonth = getLastNDays(30); //'2015-12-15'
    function  getLastNDays(n) {
        var last=new Date( Date.now()-n*1000*60*60*24);
          var year=last.getFullYear();
        var month=last.getMonth()+1;
         var date=last.getDate();
        return  year.toString()+"-"+month.toString()+"-"+date.toString();

    }
Paste_Image.png

4、完善如下代码,用于获取执行时间如:

var Runtime = (function(){
    //code here ...
    var obj = {
        start: function(){
              //code here ..., 当前时间
        },
        end: function(){
             //code here ...  结束时间
        },
        get: function(){
             //code here ...  获取执行时间
        }
    };
return obj;
}());
Runtime.start();
//todo somethint
Runtime.end();
console.log(  Runtime.get() );
        var Runtime = (function(){
            var startTime;
            var endTime;
            var difference;

             var obj = {
                start: function(){
                     startTime=Date.now();
                    return startTime;
                },
                end: function(){
                     endTime=Date.now();
                    return endTime;
                },
                get: function(){
                     difference=endTime-startTime;
                    return difference;

                }
            };
            return obj;
        }());
        Runtime.start();
        for (var i=0;i<10000;i++)
        {
            console.log(i);
        }
        Runtime.end();
        console.log(  Runtime.get() );
Paste_Image.png

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

 /*
找规律:
 如果只有1个台阶,就只有1种方法f(1)//(1)
 如果有2个台阶,就有两种方法f(2)//(1,1) ,(2)
 如果有3个台阶,就有3种方法f(1)+f(2)// (1,1,1) ,(1,2),(2,1)
 如果有4个台阶,就有5种方法f(2)+f(3)//(1,1,1,1) ,(1,1,2),(1,2,1),(2,1,1) ,(2,2)
....
 得出规律n个台阶,就有f(n-1)+f(n-2)种方法
 */
    function Methods(n) {
        var f=0;
        if (n===1){
            f=1;
        }
        else if (n===2){
            f=2

        }
        else {
            f=Methods(n-1)+Methods(n-2);
        }
        return f;
        
    }
Paste_Image.png

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

    var obj1={ "name":"licai" ,"age":24 ,"sex":"M", "like":["看书","写代码"] };
    function deepCopy(obj) {
        var newObj={};
        for ( property in obj ){
            if(typeof obj[property]==="object"){
                newObj[property]=deepCopy( obj[property] );
            }
            else {
                newObj[property]=obj[property];
            }

        }
        return  newObj;

    }
深拷贝

**本文版权归本人即简书笔名:该账户已被查封 所有,如需转载请注明出处。谢谢! *

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容