• JavaScript面试题(持续更新)


    • 先注明一下题目来源,剑哥的前端面试每日3+1 大家如果有兴趣可以去github上答题

    用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值

        <script>
            let arr = []
            function addItem() {
                let item = Math.floor(Math.random()*32 + 2)
                if(arr.indexOf(item) == -1) {
                    arr.push(item)
                }
                if(arr.length < 5) {
                    addItem()
                }
            }
            addItem()
        </script>

    2 写一个方法,去掉字符串中的空格

        <script>
            // type 0(全部空格),1(开头空格),2(结尾空格),3(开头结尾空格), 默认为0
            function trim(str,type) {
                switch(type) {
                    case 1: 
                        return str.replace(/^s*/g,'')
                        break
                    case 2: 
                        return str.replace(/s*$/g,'')
                        break
                    case 3: 
                        return str.replace(/^s*|s*$/g,'')
                        break
                    default: 
                        return str.replace(/s*/g,'')
                        break
                }
            }
            let str = ' ago ogj  '
            let newstr = trim(str)   //'agoogj'
            let newstr0 = trim(str,0) //'agoogj'
            let newstr1 = trim(str,1) //'ago ogj  '
            let newstr2 = trim(str,2) //' ago ogj'
            let newstr3 = trim(str,3) //'ago ogj'
        </script>

     3 去除字符串中最后一个指定字符

      str.lastIndexOf(code)-----获取字符所在的索引

      srt.substring(index1,index2)-----截取字符串

    <script>
            // 去除字符串中最后一个字符
            function trimCode(str,code) {
                if(str.length === 0) return
                let index = str.lastIndexOf(code)
                let newStr = str.substring(0,index) + 
            str.substring(index+1,str.length)
                return newStr
            }
    </script>

    写一个方法把下划线命名转成大驼峰命名

        <script>
            //写一个方法把下划线命名转成大驼峰命名
            function toCamel(str) {
                //使用split件str拆分成数组
                if(str.split('_').length === 1) return
                //使用reduce累加器对数据进行累加,并将索引大于0的元素首字母大写
                //substr(index,index) 截取字符串中指定索引的字符集
                let newStr = str.split('_').reduce((a,b)=>{
                    return a+b.substr(0,1).toUpperCase() + b.substr(1)
                })
                return newStr
            }
            console.log(toCamel('hello_world'))
        </script>

    5 写一个方法切换字符串的英文大小写

        <script>
            //写一个方法切换字符串的大小写
            function toggle(str) {
                return str.replace(/([a-z]*)([A-Z]*)/g, (m, s1, s2)=>{
                    return `${s1.toUpperCase()}${s2.toLowerCase()}`
                })
            }
            console.log(toggle('asgSDGWE54adDS'))
        </script>

     6 使用原生js实现以下元素操作

    <div id="tag">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
        </div>
    1)2移动到4后面; 2)删除2; 3)在3,4之间添加一个3.5
         <script>
            let tag = document.getElementById('tag')
            let div1 = document.querySelector('#tag>div:nth-child(1)')
            function fun1() {
                let div2 = document.querySelector('#tag>div:nth-child(2)')
                let div5 = document.querySelector('#tag>div:nth-child(5)')
                tag.removeChild(div2)
                tag.insertBefore(div2,div5)
            }
            function fun2() {
                let div2 = document.querySelector('#tag>div:nth-child(2)')
                tag.removeChild(div2)
            }
            function fun3() {
                let div4 = document.querySelector('#tag>div:nth-child(4)')
                let newDiv = document.createElement('div')
                newDiv.innerHTML = 3.5
                tag.insertBefore(newDiv,div4)
            }
        </script>

    7 查找一个字符串中出现最多的字符,并统计个数

        <script>
            let str = 'aghaosbasldskdpqashdaognkdalqjgoddjddjdjdjdjjdjajapaaagaggk'
            let obj = {}
            for(let i=0;i<str.length;i++) {
                if(!obj[str.charAt(i)]) {
                    obj[str.charAt(i)] = 1
                } else {
                    obj[str.charAt(i)]++
                }
            }
            let max = 0
            let maxcode = ''
            for(var key in obj) {
                if(obj[key] > max) {
                    max = obj[key]
                    maxcode = key
                }
            }
            console.log(maxcode,max)  //a 12
        </script>
    

    8 null与undefined的异同

      a 相似点

        给一个变量赋值null,undefined,这两种写法几乎等价

        两者在if条件判断语句中,都会自动装换为fasle

        null == undefined 得到的结果是true

      b 不同点 

        null === undefined 得到的结果是false

        null表示没有对象,即该处不应该有值

        undefined表示缺少值,就是此处应该有值,但是还没有定义

    9 写一个去除制表符和换行符的方法

    function deleteTabs(str = '') {
        return str.replace(/s+/g,'')
    }

    10 统计某一字符或字符串在另一个字符串中出现的次数

    function codeNums(code,str) {
        let regexp = new RegExp(code,'g')
        return str.match(regexp).length
    }

    11写一个加密字符串的方法

      字符串加密的方法很多,有md5(无解密),base64,aes,凯撒加密等,这里实现一下凯撒加密解密,MD5和base64百度很多博客,就不写了

    function baseCode(str='',type,space=3) {
        // type=1 加密,type=2解密
        if(type === 1) {
            return str.
            split("")
            .map((s) => {
                return String.fromCharCode(s.charCodeAt() + space)
            })
            .join("")
            
        }else if(type === 2) {
            return str.
            split("")
            .map((s) => {
                return String.fromCharCode(s.charCodeAt() - space)
            })
            .join("")
        }
    }
    console.log(baseCode('hello world',1,2));   //jgnnq"yqtnf
    console.log(baseCode('jgnnq"yqtnf',2,2));   //hello world

    12 写一个判断数据类型的方法

    Object.prototype.toString.call()

    13 简要描述下什么是回调函数并写一个例子出来

      回调函数就是指函数在初始定义的时候先不执行,等满足一定条件以后再拿出来执行。如下:
      setTimeout(() => { console.log('在本轮任务最后执行!') }, 0);

    14 JavaScript有哪些内置对象

    • Date
    • Array
    • Object
    • Math
    • RegExp
    • Function
    • Set
    • Map等

    15 

  • 相关阅读:
    杭电 1521 排列组合

    杭电 1799 循环多少次?
    杭电1028 Ignatius and the Princess III(整数拆分)
    毕业论文A.1 Matlab环境配置
    Open Graphics Library初步_搭建环境_GLUT
    Open Graphics Library初步_摄影机_GLUT
    C#使用office相关com组件
    插入排序
    二叉树的四种遍历方法(递归、迭代)
  • 原文地址:https://www.cnblogs.com/linhongjie/p/12621135.html
Copyright © 2020-2023  润新知