前端笔试js刷题code

 1、判断 str 是否以aoeiu(大小写)结尾

<script>
    // 'aoeiu'
    // 法一 处理code code.some()
    function check(str){
        let code = 'aoeiu'.split('')
        code = code.concat(code.map(r=>r.toUpperCase()))
        return code.some(c=>str.endsWith(c))
    }

    //法二 处理str str.toLowerCase()
    function check(str){
        str=str.toLowerCase();
        let code = 'aoeiu'.split('')
        return code.some(c=>str.endsWith(c))
    }

    //法三 字符串是否包含 .includes()
    function check(str){
        let lastCode = str.toLowerCase()[str.length-1];
        return 'aoeiu'.includes(lastCode)
    }

    //法四 正则表达式
    function check(str){
        return /[aoeiu]$/i.test(str);
    }

    console.log(check("aha"));
    console.log(check("ahA"));
    console.log(check("ahh"));
</script>

 2、找出字符串中出现最多的字符

<script>
   function getMaxCode(str){
        let obj={};
        let res = {code: '' , count: 0}
        for(let i = 0 ; i < str.length ; i++){
            //如果字符出现过 就++;
            //如果没有出现过,就赋初值1
            let code = str[i];
            if(!obj[code]) obj[code]=1;
            else obj[code]++;
        }

        for(let o in obj){ // Object.keys(obj).forEach(k => { });
            let c = obj[o]
            if(c > res.count){
                res = {code: o , count: c}
            }
            // console.log(obj[o]);
        }
        return res
   }

   //优化 一个循环
   function getMaxCode(str){
        let obj={};
        let res = {code: '' , count: 0}
        for(let i = 0 ; i < str.length ; i++){
            //如果字符出现过 就++;
            //如果没有出现过,就赋初值1
            let code = str[i];
            if(!obj[code]) obj[code]=1;
            else{
                obj[code]++;
            } 
            if(obj[code] > res.count){
                 res = {code , count: obj[code]}
                }
        }
        return res
   }
    console.log(getMaxCode("ahahahahssxxxxxxsh"));
    console.log(getMaxCode("ahA"));
    console.log(getMaxCode("ahh"));
</script>

 3、let const var

  • var可以变量提升 - 为undefined let和const无,报错
  • let和const有块级作用域
<script>
  var a = 10
  var b = 11
  var c = 12

  function test(a){ //相当于在函数里var a
    a = 1
    var b = 2
    c = 3 //无块级作用域 直接用前面的
  }
  test(100)
  console.log(a); //10
  console.log(b); //11
  console.log(c); //3
</script>

4、闭包

<script>
    var n = 0
    function a(){
     var n = 10
     function b(){ //b是a的闭包函数
         n++; // 闭包引用的是外部的局部变量 非全局变量 “自己的小金库”
         console.log(n); 
     }
     b() 
     return b
    }
 
    var c=a() // 11
    c() // 1× 11× 12 闭包维持了函数状态
    console.log(n); //0
</script>
<script>
    // 相当于
    function a(){
        var n = 10
        return function b(){
            n++ 
            return n;
        }
    }
    var c=a()
    console.log(c()); //11
    console.log(c()); //12
 </script>

 5、判断this指向 

<script>
    var obj2 = {
        age : 18,
        foo : function (func) {
            console.log(this.age); 
        }
    }
    obj2.foo() // 1、18
    let zz = obj2.foo
    zz() //2、window. undefined
</script>
<script>
    var obj = {
        age : 18,
        foo : function (func) {
            console.log(this.age); // 3、18
            
            func() // 2、window.temp() -> 10
            
            arguments[0]() // 4、相当于argument对象的0属性再调用 argument.0() 
            //-> 指向argument 没有age 故打印undefined

            let zz = arguments[0]
            zz() // 3、即window.temp() -> 10
        }
    }
    var age = 10;
    function temp(){
        console.log(this.age);
    }
    // temp() //1、普通函数 即window.temp() -> 10
    obj.foo(temp)
<script>
<script>
  var num = 10 // 全局 window.num
  var obj = { num : 20 } // obj.num
  obj.fn = (function (num){ //对象的方法 立即执行函数 
    //1、立即执行函数全局调用 传入值20 window.name=60  局部name = 21 返回一个函数
    this.num = num * 3
    num++ // obj.name
    return function (n){ //闭包函数
        this.num += n;
        num++
        console.log(num);
    } 
  })(obj.num)

  var fn = obj.fn 
  fn(5) // 2、window.fn(5)  window.num += 5 =>60+5=65 局部name = 22 打印一个22
  obj.fn(10) // 3、obj.fn(10) obj.name += 10 =>20+10=30 局部name = 23 打印一个23

  console.log(num,obj.num); // 4、65 30
</script>

函数调用的关键在于观察最相邻的调用者 , 闭包情况另判断。。

 ?
<script>
  var age = "20"
  var Tom={
    age: "18",
    show:function(){
        console.log(this.age);
    },
    wait:function(){
        this.show // Tom.show() show中this指向Tom -> 18
        //?结果没有打印结果??

        // var fun = this.show 
        // fun() //window.fun() show中this指向window -> 20     
    }
  }
  Tom.wait()
</script>

 


 















前端面试-笔试题刷题合集_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prominent.949

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值