手撕前端面试题【javascript】

简介: 手撕前端面试题【javascript】

事件委托

问题1

要求如下:

1、给"ul"标签添加点击事件

2、当点击某"li"标签时,该标签内容拼接".“符号。如:某"li"标签被点击时,该标签内容为”…"

注意:

3、必须使用DOM0级标准事件(onclick)

解答:

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
      <ul>
            <li>.11</li>
            <li>.22</li>
            <li>.33</li>
        </ul>
        <script type="text/javascript">
            var ul=document.getElementsByTagName("ul")[0];
            ul.onclick=function(e){
                e = e || window.event;
                e.target.innerHTML = ".."
            }
        </script>
    </body>
</html>

image.png总结:


🥭🥭1、给“ul”添加点击事件。

🥭🥭2、在点击事件函数中获取到点击事件“event”。

🥭🥭3、判断触发该点击事件的“event”目标是否为“li”标签。如果是“li”标签,则修改该标签的内容。

🥭🥭4、getElementsByTagName返回给定标签名称的元素HTML集合HTMLCollection。返回的HTML集合是动态的,会随着DOM树的变化自动更新自身。

🥭🥭5、对于chrome,IE8+等浏览器可以直接使用event,对于IE8以前的,event是不存在的,必须使用window.event才行,所以为了兼容,使用event = event||window.event


数组去重

问题2

要求去除数组参数中的重复数字项并返回该数组。


注意:


1、数组元素仅包含数字

示例1

输入: _deleteRepeat([-1,1,2,2])

输出: [-1,1,2]


解答:

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
        <script type="text/javascript">
            const _deleteRepeat = array => {
                // 补全代码
                var map=new Map();
                var res=[];
                for(var i =0 ;i<array.length;i++){
                    if(!map.has(array[i])){
                        map.set(array[i],1);
                        res.push(array[i])
                }
            }
                return res;
        }
        </script>
    </body>
</html>

image.png

总结


遍历循环数组,重复去除


Map和Set一样具有元素唯一性,对于非对象类型,基础值基本能去重,可以用下文的splice原地去重(去重之后要记得更新map中的key-value键值对),也可以用创建新数组装不同元素返回结果


if(!map.has(array[i])){......} 如果map中不存在相同值,那么存入数组,否则不执行打括号里面的操作


或者双循环 + splice(或者双循环+新数组,新数组遇到新数就存,否则相同的数不存入),方法还有很多

合法的URL

问题3


要求以Boolean的形式返回字符串参数是否为合法的URL格式。

注意:

1、协议仅为HTTP(S)


解答:

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
        <script type="text/javascript">
            const _isUrl = url => {
                // 补全代码
                return url.split(':')[0]  == "https";
                }
        </script>
    </body>
</html>

image.png

总结

使用分隔符split。url.split(‘:’)[0] == “https”; 举个例子吧。

url=https:// www.baidu.com
url.split(':')[0]  = "https"
url.split(':')[1]  = "// www.baidu.com"

快速排序

题目4:


请补全JavaScript代码,要求将数组参数中的数字从小到大进行排序并返回该数组。

注意:

1、数组元素仅包含数字

2、请优先使用快速排序方法


示例1

输入: _quickSort([0,-1,1,-2,2])

输出: [-2,-1,0,1,2]


解答

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
        <script type="text/javascript">
            const _quickSort = array => {
                // 补全代码
                for(let i = 0; i < array.length - 1; i++) { 
                    for(let j = 0; j<array.length - i - 1; j++) {
                        if(array[j] > array[j+1]){
                            let val = array[j];     //交换位置
                            array[j] = array[j+1];
                            array[j+1] = val;
                        }
    }
}
    return array;
            }
        </script>
    </body>
</html>

image.png

总结

双循环遍历,判断大小,交换位置,达到快速排序的效果。当然,用数组解构赋值交换位置更好些。但是一般情况下知道怎么来的就可以了,我们一般直接用return array.sort(),sort是自带的封装好的函数。

目录
相关文章
|
3天前
|
自然语言处理 JavaScript 前端开发
三个JavaScript面试题
摘要: - 闭包是JavaScript函数能记住词法作用域,即使在外部执行。示例:计数器函数`createCounter()`返回访问`count`的匿名函数,每次调用计数递增。 - 事件循环处理异步操作,通过检查任务队列执行回调。示例:`setTimeout`异步任务在3秒后添加到队列,待执行,输出顺序为同步任务1、2,然后异步任务1。 - 箭头函数是ES6简洁的函数定义方式,如`greet = name =&gt; `Hello, ${name}!`。它没有自己的`this`,不适用作构造函数。
24 6
|
7天前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
8天前
|
JavaScript 前端开发 开发者
【Web 前端】什么是JS变量提升?
【5月更文挑战第1天】【Web 前端】什么是JS变量提升?
【Web 前端】什么是JS变量提升?
|
9天前
|
缓存 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 前端路由实现原理
【4月更文挑战第30天】本文探讨了JavaScript前端路由在SPA中的重要性,阐述了其基本原理和实现方式,包括Hash路由和History路由。前端路由通过监听URL变化、匹配规则来动态切换内容,提升用户体验和交互性。同时,文章也提到了面临的SEO和页面缓存挑战,并通过电商应用案例分析实际应用。理解并掌握前端路由能助开发者打造更流畅的单页应用。
|
10天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)
|
10天前
|
移动开发 缓存 JavaScript
前端javascript的DOM对象操作技巧,全场景解析(一)
前端javascript的DOM对象操作技巧,全场景解析(一)
|
10天前
|
缓存 编解码 自然语言处理
前端javascript的BOM对象知识精讲
前端javascript的BOM对象知识精讲
|
10天前
|
JavaScript 前端开发 开发者
【Web 前端】JS模块化有哪些?
【4月更文挑战第22天】【Web 前端】JS模块化有哪些?
|
10天前
|
前端开发 JavaScript
【Web 前端】 js中call、apply、bind有什么区别?
【4月更文挑战第22天】【Web 前端】 js中call、apply、bind有什么区别?
【Web 前端】 js中call、apply、bind有什么区别?
|
10天前
|
前端开发 JavaScript 索引
【Web 前端】JS的几种具体异常类型(报错)
【4月更文挑战第22天】【Web 前端】JS的几种具体异常类型(报错)