zoukankan      html  css  js  c++  java
  • 前端面试之那些稀奇古怪的问题

    (一)假设有一个数组有10000项,请问访问a[0]需要花费的时间和访问a[9999]花费的时间有什么区别。(直接通过下标访问,不需要遍历)

    答案:没区别,时间相同。群里大佬原话(没区别,这是直接拿,相当于根据索引拿);

    补充:存取时间一样 ,存取不是插入删除 ,不需要移动数组中元素位置 ,下标对应的都是内存上的地址。

               插入删除消耗的时间是看你动的元素所在下标 ,数组头是最消耗时间的 ,后面所有元素都要动。

     

    (二)实现数字格式化,每三位加逗号,例如9999999 -> 9,999,999

    答案

    方法一:正则表达式,不过理解有一定难度。

    function filter(num) {
           let str = num.toString();
           return str.replace(/(?=(B)(d{3})+$)/g,",");
    }

    方法二:循环

         var number=999999; 
            var arr=number.toString().split("");
            for(var i=arr.length-4;i>=0;i-=3)
                {
                    arr[i]+=","
                } 
            console.log(arr.join(""))

     (三) 要求在问号处填入正确内容,使程序输出 ok。

    答案: 

    var a = {
            a:0,
            valueOf: function() {
                return ++this.a;
            }
        };
    
        if(a==1 && a==2 && a==3) {
            console.log("ok");
        }

    补充:这道题涉及了隐式类型转换(js很坑的地方,反正我是被这种题虐了千百遍),隐式转换其实很简单,下面做简要的说明。

    当不同类型之间做比较时会发生隐式类型转换,转换的方向如图:

    所以如果类型不同一般往数字转就完了(特例除外)

    数组/对象在转化成字符串的时候会调用valueOf方法和toString()方法

    但是在使用 ! 逻辑非的时候会直接使用Boolean(arr/object)进行转换,

    所以才有 ![] == [] // 左侧相当于 Number(!Boolean([])),右侧为 Number([])

    更多隐式类型转换问题请看 https://blog.csdn.net/itcast_cn/article/details/82887895

  • 相关阅读:
    MySQL主从复制
    shell 文件中添加内容
    nginx+tomcat 负载均衡
    springMVC接受数组
    javaweb集成swagger
    svn 验证位置失败 Authorization failed
    java 实现一个beautiful的弹层和具体功能
    java 实现冒泡排序
    Error running 'Unnamed': Address localhost:1099 is already in use
    页面怎么引用外部css+js代码
  • 原文地址:https://www.cnblogs.com/tcxq/p/11281772.html
Copyright © 2011-2022 走看看