增进JavaScript理解的题目

Posted 今天天气真好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了增进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(!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++
    }
})()

4.编写一个函数,返回指定位数的随机字符串


function randomString(str_len){
    var ALPHABET = \'ABCDEFGHIJKLMNOPQRSTUVWXYZ\';
  ALPHABET += \'abcdefghijklmnopqrstuvwxyz\';
  ALPHABET += \'0123456789-_\';
  var str = \'\';
  let index = 0
  for(let i = 0;i < str_len;i++){
      
      let a = Math.random() * ALPHABET.length
        index = Math.floor(a)
      str += ALPHABET[index]
  }
  return str
}

let b= randomString(5)
console.log(b)

5.编写一个函数,要求实现add(1,2),add(1,2)(3),add(1,2)(23)(5)等不定参数的加减

function add2(){
    let _args = Array.prototype.slice.call(arguments)
    let _add2 = function(){
        _args.push(...arguments)
        return _add2
    }
    _add2.toString = function(){
        let b = _args.reduce((x,y)=>{
            return x+y
        })
        return b
    }
    return _add2
}

6.编写一个函数,对字符串中相应重复字符计数拼接后返回

例子:

let str = \'aabbbcdddeeeeee\'
let b = transformStr(str)//a2b3c1d3e6
let str = \'aabbbcdddeeeeee\'
function transformStr(str){
    let line = str.match(/(\\w)\\1*/g)
    let result = ""
    for(let i = 0;i < line.length;i++){
        result += line[i][0]
        result += line[i].length
    }
    return result
}
let b = transformStr(str)

以上是关于增进JavaScript理解的题目的主要内容,如果未能解决你的问题,请参考以下文章

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

为增进理解力而奋斗终身

Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)

P2080 增进感情

拾遗理解Javascript中的Arguments

JavaScript函数polyfill系列