zoukankan      html  css  js  c++  java
  • Javascript面试题浅析

    分享几道JavaScript相关的面试题.

    字符串反转

    这这里提供了两种解题思路。如果各位读者还有其他的思路,可以分享交流!

    第一方法:

    function reverse(str){
        var sp = str.split(',');
        //保存反转之后的字符串
        var new_str = '';
        /*从后往前取,用逗号分隔*/
        for(var i = sp.length-1;i>=0;i--){
            new_str += sp[i]+',';
        }
        /*取到length-1,否则会取到最后一个逗号。*/
        new_str = new_str.substring(0,new_str.length-1);
        return new_str;
    }
    

    第二种方法:

    function reverse(str){    
        return str.split(',').reverse().join(',');
    }
    

    编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″

    1.用?将url拆成两部分,第一部分为:http://witmax.cn/index.php,第二部分为:key0=0&key1=1&key2=2。也就是将地址和参数分开,保存在一个数组中

    var arr = url.split('?');
    

    2.在1的基础上将之前的部分,即参数部分用&拆成多个部分,如key0=0,key1=1。然后用=号将键值对拆开。

    var arr = arr[1].split("&");
    for(var i = 0; i < arr.length; i++){
        var a = arr[i].split('=');
        params[a[0]] = a[1];
    }
    

    完整代码

    function parseQueryString(url){
        //如果url为空或url没有参数则直接返回
        if(url === null || url.indexOf('?') < 0) return ;
        var params = [];
        //将url拆成2部分
        var arr = url.split('?');
        if(arr.length <= 1){
            return params;
        }
        //用&拆成多个部分,每个部分是一个键值对
        //然后用=将键值对拆分
        arr = arr[1].split('&');
        for(var i = 0; i < arr.length; i++){
            var a = arr[i].split('=');
            params[a[0]] = ar[1];
        }
        return params;
    }
    

    点击页面上的任意元素,弹出元素的标签名

    这里涉及到浏览器的兼容性问题。简单的说明一下target和srcElement以及event的区别。

    在IE浏览器中,event对象是作为window.event全局对象存在的。在Firefox中是作为事件参数存在的

    srcElement是IE中的用法,target是非IE浏览器中的用法。为了兼容可以用如下方式获取:

    target = event.srcElement ? event.srcElement : event.target;
    

    要获取标签名可以通过tagName属性。

    function getTarget(event){
        event = window.event || event;
        return event.srcElement || event.target;
    }
    document.onclick = function(event){
        var tag = getTarget(event);
        alert(tag.tagName);
    }
    

    编写一个方法,求一个字符串的字节长度

    假设,一英文字符占用一个字节,一个中文字符占用两个字节。

    主要用到的方法是charCodeAt()。charCodeAt()方法返回的是指定位置字符的unicode码,而大于255的编码值为非常规字符,如中文、英文等。

    function getBytes(str){
        //没传参
        if(arguments.length === 0 || !str) return null;
        if(str.length <= 0 || str === '') return 0;
        var len = str.length;
        //字节数
        var bytes = 0;
        for(var i = 0; i < len; i++){
            if(str.charCodeAt(i) > 255){
                bytes += 2;
            }else{
                bytes += 1;
            }
        }
        return bytes;
    }
    console.log(getBytes('代码之美,beautiful code'));//24

    转载请注明出处

    如果你觉得文章不错,可以点一下右下角的推荐

    今天的风有点喧嚣啊

  • 相关阅读:
    springboot使用MockMvc测试controller
    MySQL5.6版本之后设置DATETIME类型自动更新
    MAVEN打包时跳过Junit测试
    没看这篇干货,别和我说你会IDEA Debug
    java通过HtmlUnit工具和J4L实现模拟带验证码登录
    Vue+Java实现在页面树形展示文件目录
    exceptions: django2.2/ mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
    linux 软连接的使用
    Linux pip命令报错 -bash: pip: command not found
    MySQL使用命令导出/导入数据
  • 原文地址:https://www.cnblogs.com/maple0x/p/5551626.html
Copyright © 2011-2022 走看看