增进JavaScript理解的题目

在实习求职面试中,被告知代码掌握不够,特开此文练习JavaScript技巧

一、JavaScript技巧篇

1.编写一个parseNum函数将变量内的number数据类型变为对应string

示例:

//示例
var o = {
        a:1,
        b:{
            c:2,
            d:3,
            e:[4,5,6]
        }
    }
var b = parseNum(o)
b = {
        a:'1',
        b:{
            c:'2',
            d:'3',
            e:['4','5','6']
        }
    }

答案:


function parseNum(obj){
    if(typeof obj === 'number')
        return obj.toString()
    if(typeof obj === 'object'){
        if(Array.isArray(obj)){
            for(var i in obj)
                obj[i] = obj[i].toString()
            return obj
        }
        else if(!obj && typeof obj !=="undefined" && obj != 0) return obj
        else{
            for(var i in obj){
                obj[i] = parseNum(obj[i])
            }
            return obj
        }
    }
}

解析:
本题考察的是数据类型的检测,使用typeof函数获得obj的名称,然后进行字符串比较。
在这个过程中,需要注意typeof null、Array、Function都会得到object
使用Array.isArray()以及(!obj && obj!==0 && typeof obj !== 'undefined')分辨Array和Null
本问题参考文献:
https://developer.mozilla.org...
https://developer.mozilla.org...

2.编写一个函数mRead读取数组,要求记忆每次读取的进度

案例:

var c = [2,3,4,5,6,7,8,9,10]
var rea = mRead(c)
rea(1) //[2]
rea(1) //[3]
rea(2) //[4,5]
rea(-1.5) //[6]

答案:

function mRead(line){
    var seen;
    if(typeof seen === 'undefined'){
        seen = 0;
    }
    return function m(n){
        if(n <1 || n%1!==0)
            n = 1
        var a = line.slice(seen,seen+n)
        seen += n
        return a
    }
}

3.编写一个函数,要求不能声明任何外部函数;奇数次调用该函数时输出1,偶数次调用该函数输出2

let a = (function(){
    let count = 1
    return function(){
        if(count % 2 !== 0){
            console.log(1)
        }
        else{
            console.log(2)
        }
        count++
    }
})()

你可能感兴趣的:(面试javascript)