本文将通过几个典型的面试题和代码示例,深入探讨 JavaScript 的核心概念和实际应用。我们将从基础的同步异步执行顺序,到 DOM 操作和滚动事件处理,再到用户输入验证等多方面进行详细解析。希望读者能够通过本文加深对 JavaScript 的理解,并掌握一些实用的编程技巧。
在以下代码中,console.log 的输出顺序是什么?
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <script>
- console.log(1);
- setTimeout(function(){
- console.log(2);
- }, 0);
- console.log(3);
- setTimeout(function(){
- console.log(4);
- }, 1000);
- console.log(5);
- setTimeout(function(){
- console.log(6);
- }, 500);
- console.log(7);
- </script>
- </body>
- </html>
-
这段代码展示了 JavaScript 中同步和异步任务的执行顺序。JavaScript 是单线程语言,所有的任务都在一个线程上执行,分为同步任务和异步任务。同步任务会立即执行,而异步任务会被放入任务队列中,等待主线程空闲时再执行。
因此,最终的输出顺序为:1 3 5 7 2 6 4。
如何获取窗口的高度和宽度,以及文档的可视区域高度和宽度?
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- body {
- height: 5000px;
- width: 5000px;
- }
- </style>
- </head>
- <body>
- <script>
- // 窗口的高(包含滚动条的高) 窗口的宽(包含滚动条)
- console.log(window.innerHeight, window.innerWidth);
- // 文档区域的可视高(不包含滚动条) 文档区域的可视宽(不包含滚动条)
- // document : 文档对象
- // documentElement: html
- console.log(document.documentElement.clientHeight, document.documentElement.clientWidth);
- </script>
- </body>
- </html>
-
这段代码展示了如何使用 JavaScript 获取窗口和文档的尺寸信息:
如何在页面加载完成后执行特定的 JavaScript 代码?
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script>
- // 添加一个页面加载事件
- // window.onload : 页面加载事件,当浏览器将页面中所有的内容(文本、图片、音频、视频)全部加载成功后,执行后面的函数。
- window.onload = function() {
- // document.querySelector('选择器') : 通过选择器获取一个元素对象
- var o_box = document.querySelector('#box');
- alert(o_box);
- }
- </script>
- </head>
- <body>
- <div id="box"></div>
- <script>
- // document.querySelector('选择器') : 通过选择器获取一个元素对象
- var o_box = document.querySelector('#box');
- alert(o_box);
- </script>
- </body>
- </html>
-
这段代码展示了如何使用 window.onload 事件来确保页面所有资源加载完毕后再执行 JavaScript 代码。window.onload 事件会在页面的所有内容(包括图片、音频、视频等)加载完成后触发。
如何根据滚动条的位置显示或隐藏一个固定元素?
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- body {
- height: 5000px;
- }
- #box {
- width: 50px;
- height: 50px;
- background: red;
- color: yellow;
- position: fixed;
- right: 50px;
- bottom: 50px;
- display: none;
- }
- </style>
- </head>
- <body>
- <div id="box">顶部</div>
- <script>
- // 获取页面元素
- var o_box = document.querySelector('#box');
- // 1. 求滚动条到顶端的距离
- // 2. 触发滚动事件 onscroll
- // 添加事件
- window.onscroll = function() {
- // 求滚动条到顶端的距离
- // 除了低版本谷歌都支持
- // var scrollTop = document.documentElement.scrollTop;
- // 低版本谷歌
- // var scrollTop = document.body.scrollTop;
- // 兼容
- var scrollTop = Math.floor(document.documentElement.scrollTop || document.body.scrollTop);
- console.log(scrollTop);
- if (scrollTop >= 3000) {
- o_box.style.display = 'block';
- } else {
- o_box.style.display = 'none';
- }
- }
- // 给 box 添加一个点击事件
- o_box.onclick = function() {
- document.documentElement.scrollTop = document.body.scrollTop = 0;
- }
- </script>
- </body>
- </html>
-
这段代码展示了如何使用滚动事件 window.onscroll 来监听用户的滚动行为,并根据滚动距离显示或隐藏一个固定元素。
如何实现一个带输入提示框的数字验证功能?如果输入的数字大于 10,提示是否进行加 10 操作;如果小于 10,则提示无法运算。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <script>
- while (true) {
- // 一个带输入的提示框
- var n = prompt('请输入一个数字');
- // 点击取消,就不进行后面操作。直接退出循环
- if (!n) {
- break;
- }
- // 判断是否为数字 只能输入数字
- if (!isNaN(n)) { // 数字
- // 如果输入的数字大于 10
- if (n > 10) {
- // 提示我们是否进行输入的数 + 10
- if (confirm("是否进行输入的数 + 10")) {
- // <1>如果点击确定,输出表达式和结果,
- alert(n + '+' + 10 + '=' + (Number(n) + 10));
- }
- } else {
- alert('无法运算');
- }
- }
- }
- </script>
- </body>
- </html>
-
这段代码实现了用户输入验证和循环操作的功能:
通过以上几个典型面试题的解析和代码示例,我们可以看到 JavaScript 在前端开发中的广泛应用。无论是同步异步执行顺序、DOM 操作、滚动事件处理,还是用户输入验证,都是前端开发者必须掌握的核心技能。