美文网首页
Javascript:时间对象,引用类型

Javascript:时间对象,引用类型

作者: INTERNALENVY | 来源:发表于2016-06-25 11:19 被阅读26次

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

    • 基本类型值(数值,字符,布尔,null,undefined):保存在栈内的简单数据段。
    • 引用类型值(对象,正则,数组,函数):数据保存在堆内,指针保存在栈内,指向对应的堆。

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

    <pre>
    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2); //false 因为obj1和2中存着不同的指针地址
    console.log(obj1 = obj2); //Object{a:1,b:2} 赋值语句,把obj2的指针赋值给obj1,所以把原先obj2的堆内容展示出来
    console.log(obj1 == obj2); //ture,两指针相等
    </pre>

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

    <pre>
    var str = getIntv("2016-01-08");
    console.log(str); // 距除夕还有 20 天 15 小时 20 分 10 秒
    </pre>
    <pre>
    function getIntv(val){
    var target = Date.parse(val);
    var now = Date.now();
    var result = target - now;
    if(result >= 0){
    var day = Math.floor(result/1000/60/60/24);
    var hour = Math.floor(result/1000/60/60-day24);
    var min = Math.floor(result/1000/60-day
    2460-hour60);
    var sec = Math.floor(result/1000-min60-day246060-hour6060);
    var str = "距" +val+ "还有" + day + "天" + hour + "小时" + min + "分" + sec +"秒";
    }else{
    str = "已经过去了。"
    }
    return str;
    }
    </pre>

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

    <pre>
    var str = getChsDate('2015-01-08');
    console.log(str); // 二零一五年一月八日
    </pre>
    <pre>
    function getCNDate(val){
    var char=["零","一","二","三","四","五","六","七","八","九","十"];
    var val2 = val.replace(/-/g,'');
    var str =[];
    for(var i = 0; i < val.length;i++){
    for(var j =0; j < char.length;j++){
    if (val[i] ==j){
    str.push(char[j]);
    }
    }
    }
    if (str[4]!="零" && str[6] != "零"){
    var str2 = str[0]+str[1]+str[2]+str[3]+"年"+str[4]+str[5]+"月"+str[6]+str[7]+"日";
    }else if (str[4]!="零" && str[6] == "零") {
    var str2 = str[0]+str[1]+str[2]+str[3]+"年"+str[4]+str[5]+"月"+str[7]+"日";
    }else if (str[4] == "零" && str[6]!="零") {
    var str2 = str[0]+str[1]+str[2]+str[3]+"年"+str[5]+"月"+str[6]+str[7]+"日";
    }else{
    var str2 = str[0]+str[1]+str[2]+str[3]+"年"+str[5]+"月"+str[7]+"日";
    }
    return str2;
    }
    </pre>

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

    <pre>
    var lastWeek = getLastNDays(7); // ‘2016-01-08’
    var lastMonth = getLastNDays(30); //'2015-12-15'
    </pre>
    <pre>
    function getLast(val){
    var now = Date.now();
    var inter = val * 24 * 60 * 60 * 1000;
    var target = now - inter;
    var thatDay = new Date(target);
    return thatDay.toLocaleDateString().replace(///g,'-');
    }
    </pre>

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

    <pre>
    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() );
    </pre>
    <pre>
    var Runtime = (function(){
    var start=0,end=0,inter=0;
    return {
    start: function(){
    start = Date.now();
    },
    end: function(){
    end = Date.now();
    },
    get: function(){
    return inter = end - start;
    }
    };
    }());
    Runtime.start();
    for (var i = 0; i < 10000; i++) {
    console.log(1);}
    Runtime.end();
    console.log( Runtime.get() );
    </pre>

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

    <p>
    自己想没想出来,参考的同学的,不过这个函数跑200跑不出来,跑10倒是可以,200或者100直接不返回值了,不知道为什么,换了别的浏览器和电脑也不行
    </p>

    Paste_Image.png

    <pre>
    function stair(n){
    if(n==1) return 1;
    if(n==2) return 2;
    return stair (n-1) + stair (n-2);
    }
    </pre>

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

    <pre>
    var obj1 = {
    "firstName": "John",
    "lastName": "Smith",
    "sex": "third",
    "age": 25,
    "address":
    {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021"
    }
    }
    function objCopy1(obj){
    var newObj ={};
    for (var key in obj) {
    if( typeof (obj[key]) == 'object'){
    newObj[key] = objCopy1(obj[key]);
    }else{
    newObj[key] = obj[key];
    }
    }
    return newObj;
    }
    </pre>

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

    <pre>
    var obj2 = {
    "firstName": "John",
    "lastName": "Smith",
    "sex": "third",
    "age": 25,
    "phoneNumber":
    [
    {
    "type": "home",
    "number": "212 555-1234"
    },
    {
    "type": "fax",
    "number": "646 555-4567"
    }
    ]
    }
    function objCopy2(obj){
    var newObj =[];
    for (var key in obj) {
    if( typeof (obj[key]) == 'object'){
    newObj[key] = objCopy2(obj[key]);
    }else{
    newObj[key] = obj[key];
    }
    }
    return newObj;
    }

    </pre>

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

    <p>
    这里的理解题目的需求是,如果检测到是对象,则存入newObj{}中,如果检测到是数组,则存入newObj[]中,不过不知道如何按顺序将两种格式的数据合并到一起,所以暂时只能统一看成是对象。。。。参考了其他同学的代码,发现没有太好的解决方案。望解答。
    </p>
    <pre>
    function objCopy3(obj){
    var newObj ={};
    for (var key in obj) {
    if( typeof (obj[key]) == 'object'){
    newObj[key] = objCopy3(obj[key]);
    }else{
    newObj[key] = obj[key];
    }
    }
    console.log(newObj);
    return newObj;
    }
    </pre>

    版权归ENVY和饥人谷所有,转载请注明出处

    相关文章

      网友评论

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

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