是神代利世

文章涵盖了前端面试中常见的DOM操作,如选择、创建和修改元素,以及BOM的理解,包括Window、Location等对象。还讨论了JavaScript的本地存储机制,如Cookies、WebStorage和IndexedDB,以及防抖和节流的概念和实现,用于性能优化。此外,提到了如何使用Array.isArray()判断一个变量是否为数组。
摘要由CSDN通过智能技术生成

1.DOM常见的操作有那些

DOM(文档对象模型)是用于操作和处理HTML、XML等文档结构的编程接口。以下是一些常见的DOM操作:

  1. 选择元素:使用各种选择器(例如标签名、类名、ID等)选择文档中的元素。

  2. 创建元素:使用document.createElement(tagName)创建新的元素节点。

  3. 获取和修改元素属性:使用element.getAttribute(attributeName)获取元素的属性值,使用element.setAttribute(attributeName, value)修改元素的属性值。

  4. 添加和移除元素:使用parentElement.appendChild(newElement)将一个新元素添加到父元素的末尾,使用parentElement.removeChild(childElement)从父元素中移除一个子元素。

  5. 修改元素内容:使用element.innerHTML获取或设置元素的HTML内容,使用element.textContent获取或设置元素的文本内容。

  6. 添加和移除事件监听器:使用element.addEventListener(event, handler)添加事件监听器,使用element.removeEventListener(event, handler)移除事件监听器。

  7. 遍历和操作节点树:使用element.childNodes获取元素的子节点列表,使用element.parentNode获取元素的父节点,使用element.nextSiblingelement.previousSibling获取元素的下一个和上一个兄弟节点。

  8. 修改元素样式:使用element.style.propertyName设置元素的CSS属性。

这些只是DOM操作的一些常见例子,实际上还有许多其他的DOM方法和属性可用于处理和操作文档中的元素和节点。

2.说说你对BOM的理解,常见的BOM对象你了解哪些?

BOM(浏览器对象模型)是用于操作浏览器窗口和浏览器相关功能的编程接口。它提供了访问和控制浏览器窗口、浏览器历史、浏览器定位、浏览器提供的对话框等功能。下面是一些常见的BOM对象:

  1. Window对象:表示浏览器窗口,是BOM的顶级对象。它提供了对浏览器窗口的控制,包括打开、关闭窗口、调整窗口大小、获取窗口尺寸和位置等。

  2. Navigator对象:提供了关于浏览器本身的信息,如浏览器的名称、版本、用户代理字符串等。

  3. Location对象:提供了与浏览器定位相关的功能,可以获取或设置当前文档的URL、跳转到其他URL、重载当前页面等。

  4. History对象:用于操作浏览器的历史记录,可以通过后退、前进、跳转到指定页面等方法来控制浏览器的导航。

  5. Screen对象:提供了关于用户屏幕的信息,如屏幕尺寸、颜色深度等。

  6. Document对象:虽然它属于DOM,但也可以被视为BOM的一部分,它表示当前文档的内容,可以用于访问和修改文档结构和元素。

  7. Cookies对象:用于读取、添加和删除浏览器的cookie。

这些是BOM中一些常见的对象,它们提供了丰富的功能和方法,使开发者可以与浏览器进行交互和控制。需要注意的是,BOM的具体实现可能会因浏览器的不同而有所差异,因此在编写跨浏览器的JavaScript代码时,需要注意兼容性问题。

3.Javascript本地存储的方式JavaScript提供了几种本地存储的方式,用于在浏览器端将数据存储在用户的本地设备上。以下是常见的本地存储方式及其区别和应用场景:

  1. Cookies(Cookie):

    • 区别:Cookies是一小段存储在用户计算机上的数据,由服务器发送到浏览器并存储在本地。每个Cookie的存储容量有限(通常为4KB),每个域名下的Cookie数量也有限制。Cookies每次请求都会被发送到服务器。
    • 应用场景:Cookies通常用于存储少量数据,例如用户偏好设置、会话标识等。由于Cookies具有跨会话持久性,它们适用于跟踪用户行为和实现用户身份验证。
  2. Web Storage(包括localStorage和sessionStorage):

    • 区别:Web Storage提供了两个对象:localStorage和sessionStorage。localStorage存储的数据没有过期时间,会一直保留在本地,除非主动删除。sessionStorage存储的数据在会话结束后被清除,即用户关闭浏览器窗口或标签页。
    • 应用场景:Web Storage适用于需要在页面刷新或重新打开后保持数据的情况。它们可以用于存储用户的表单数据、本地缓存数据等。
  3. IndexedDB:

    • 区别:IndexedDB是一种基于键值对的客户端数据库,允许存储大量结构化数据。它具有较高的存储容量限制,可以在浏览器中创建多个数据库。IndexedDB提供了异步API,可进行高级查询和事务管理。
    • 应用场景:IndexedDB适用于需要在客户端存储和处理大量数据的应用,例如离线应用、大型游戏等。
  4. Web SQL Database:

    • 区别:Web SQL Database是一种基于SQL的浏览器数据库,但它已被废弃并不被现代浏览器支持。尽管如此,一些旧版本的浏览器仍然支持Web SQL Database。
    • 应用场景:由于Web SQL Database已被废弃,不推荐在新的项目中使用它。取而代之的是使用IndexedDB或其他现代的本地存储方案。

根据具体需求和浏览器的支持情况,可以选择合适的本地存储方式。Cookies适用于存储小型数据和实现跨会话持久性,Web Storage适用于需要在页面刷新或重新打开后保持数据的场景,IndexedDB适用于大量结构化数据的存储和处理。有哪些?区别及应用场景?

4.什么是防抖和节流?有什么区别?如何实现?

防抖(Debounce)和节流(Throttle)是两种常见的优化技术,用于控制函数的执行频率。

  1. 防抖(Debounce):

    • 定义:防抖是指在事件被触发后,等待一段时间后执行函数。如果在等待时间内再次触发了事件,则重新计时。简单来说,就是将多次连续触发的事件合并成一次触发。
    • 应用场景:适用于需要等待用户停止操作后执行函数的场景,例如搜索框输入、窗口大小调整等。
  2. 节流(Throttle):

    • 定义:节流是指在一定时间间隔内只执行一次函数。它会定期触发函数,并在每次触发时执行函数,无论事件触发频率多高。
    • 应用场景:适用于需要限制函数执行频率的场景,例如滚动事件、鼠标移动事件等。

区别:

  • 防抖关注的是事件连续触发的情况,只在等待时间结束后执行最后一次触发的函数。
  • 节流关注的是函数的执行频率,按照一定时间间隔定期执行函数。

实现方法:
防抖和节流的实现方法有很多种,以下是常见的实现方式:

  1. 防抖的实现:
function debounce(func, delay) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}
  1. 节流的实现:
function throttle(func, delay) {
  let timer;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        func.apply(this, args);
        timer = null;
      }, delay);
    }
  };
}

以上代码示例中,func表示要执行的函数,delay表示延迟时间。通过使用setTimeout来延迟函数的执行,实现了防抖和节流的效果。

需要根据具体需求选择适合的防抖和节流方法,并根据实际情况调整延迟时间。

5.如何通过JS判断一个数组

通过JS可以使用Array.isArray()方法来判断一个变量是否为数组。这个方法会返回一个布尔值,如果给定的变量是数组,则返回true,否则返回false

以下是使用Array.isArray()方法来判断一个数组的示例代码:

const arr = [1, 2, 3];
const isArr = Array.isArray(arr);
console.log(isArr); // 输出 true

const obj = { a: 1, b: 2 };
const isObjArr = Array.isArray(obj);
console.log(isObjArr); // 输出 false

在上面的示例中,Array.isArray()方法首先对arr进行判断,返回true,因为它是一个数组。而对于obj,返回的是false,因为它不是一个数组。

需要注意的是,Array.isArray()方法在ES5及以上的浏览器中可用,如果在旧版本的浏览器中使用,请使用其他方式进行数组判断,比如使用Object.prototype.toString.call()方法:

const arr = [1, 2, 3];
const isArr = Object.prototype.toString.call(arr) === '[object Array]';
console.log(isArr); // 输出 true

这种方式也可以用来判断一个变量是否为数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是神代利世

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

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

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

打赏作者

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

抵扣说明:

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

余额充值