美文网首页饥人谷技术博客
前端基础(问答14)

前端基础(问答14)

作者: 郑哲明 | 来源:发表于2016-07-19 19:31 被阅读37次

    keywords: 数组读写、字符串转化数组、数组转字符串、函数、数学函数、随机数、ES5数组、排序。


    问题

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

    基本类型(数值、字符串、布尔值、null、undefined ):指保存在在栈内存当中的简单数据段。

    引用类型(数组、函数、对象、正则):指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。

    例如:

    var a = 1;
    var b = a;
    a = 2;
    console.log(b);     //1
    
    var c = "hello",
        d = c;
    c += " world";
    console.log(d);     //hello
    
    var obj1 = {name: 'kevin', sex: male},
        obj2 = obj1;
    obj1.name = 'xiaoming';
    console.log(obj2);          //{name:'xiaoming',sex:male'}
    
    var arr1 = [1,2,3],
        arr2 = arr1;
    arr1.push(4);
    console.log(arr2);          //[1,2,3,4]
    
    
    基本类型和引用类型的特征
    • 如下代码的输出? 为什么?

    var obj1 = {a: 1, b: 2};              //开辟一块内存空间,填入数据{a:1,b:2},给变量赋指针
    var obj2 = {a: 1, b: 2};              //开辟另一块内存空间,填入数据{a:1,b:2},给变量赋指针
    console.log(obj1 == obj2);      //false    隐式转换:先调用valueOf,返回对象本身,而obj1和obj2的指针不同
    console.log(obj1 = obj2);        //{a:1,b:2}    将obj2的指针赋给obj1
    console.log(obj1 == obj2);      //true          此时,obj1与obj2完全相同
    

    代码

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

    var str = getIntv("2017-01-08");
    console.log(str);  
    
    function getIntv(val) {
        var milliseconds = new Date(val) - new Date()
        var changeSeconds = milliseconds/1000                       //剩余的总时间,以秒为单位
        var days = Math.floor(changeSeconds / (3600 * 24))    //还剩多少天
        var hoursRemain = changeSeconds % (3600 * 24)        //求余,减去最大天数后剩下的时间,以秒为单位
        var hours = Math.floor(hoursRemain / 3600)                //还剩多少小时
        var minusRemain = hoursRemain % 3600                    //求余,减去最大小时数后剩下的时间,以秒为单位
        var minus = Math.floor(minusRemain / 60)                 //还剩多少分钟
        var secondsRemain = minusRemain % 60                   //求余,减去最大分钟数后剩下的时间,以秒为单位
        var  seconds = Math.floor(secondsRemain)                //向下取整,求得剩余秒数
        return '距离' + val + '还有' + days + '天' + hours + '小时' + minus + '分' + seconds + '秒'
    }
    
    • 把数字日期改成中文日期

    var str = getChsDate('2015-01-08');
    console.log(str);  // 二零一五年一月八日
    
    
    function getChsDate(val) {
        var dataNum = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一']
        var dataStr = ''
        for (var i = 0 ; i < 4 ; i++) {
            dataStr += dataNum[Number(val.substr(i,1) )]
            var year = dataStr
        }
        var month = dataNum[Number(val.substr(5,2) )]
        var day = dataNum[Number(val.substr(8,2) )]
        return year + '年' + month + '月' + day + '日'
    }
    
    • 写一个函数获取n天前的日期

    
    var lastWeek =  getLastNDays(7); // ‘2016-01-08’
    var lastMonth = getLastNDays(30); //'2015-12-15'
    
    function getLastNDays(val) {
        var lastSeconds = new Date() - val*24*3600*1000
        var date = new Date(lastSeconds)
        var lastYear = date.getFullYear() 
        var lastMonth = date.getMonth() + 1
        var lastDate = date.getDate()
        if (lastMonth < 10) {
            lastMonth = '0' + lastMonth
        } 
        if (lastDate < 10) {
        lastMonth = '0' + lastDate
    } 
        return lastYear + '-' + lastMonth + '-' + lastDate
    }
    
    • 完善如下代码,用于获取执行时间如:

    var Runtime = (function(){
        //code here ...
        return {
            start: function(){
                  //code here ..., 当前时间
                begin = new Date()
            },
            end: function(){
                 //code here ...  结束时间
                end = new Date()
            },
            get: function(){
                 //code here ...  获取执行时间
                var timeUse = end - begin
                return timeUse + 'ms'
            }
        };
    }());
    Runtime.start();
    //todo somethint
    for (var i = 0 ; i < 10000 ; i++) {
        console.log(1)
    }
    Runtime.end();
    console.log(  Runtime.get() );
    
    • 楼梯有200级,每次走1级或是2级,从底走到顶一共有多少种走法?用代码(递归)实现

    function floorMethod(val) {
        if(val <= 0) return 0
        if(val === 1) return 1
        if(val === 2) return 2
        return arguments.callee(val-1) + arguments.callee(val-2) 
    }
    //200级浏览器以及无法响应
    
    • 写一个json对象深拷贝的方法,json对象可以多层嵌套,值可以是字符串、数字、布尔、json对象中的任意项

    function copyJson(json) {
        var newJson = {}
        for (var key in json) {
            if (typeof json[key] === 'object') {
                newJson[key] = copyJson(json[key])
            }
            else newJson[key] = json[key]
        }
        return newJson
    }
    
    var json = {name: 'jirengu' , age: 2 , place :{contry : 'china' , address : {province : 'hubei' , city : 'jingzhou'}}}
    
    var json2 = copyJson(json)
    
    json.place.address.city = 'hangzhou'
    
    console.log(json)
    
    console.log(json2)
    

    相关文章

      网友评论

        本文标题:前端基础(问答14)

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