极力推荐10个短小实用的JavaScript代码段

接下来我来为大家讲解极力推荐10个短小实用的JavaScript代码段的攻略。

一、介绍

首先我们需要明确,这10个短小实用的JavaScript代码段主要是针对于前端开发者,能够帮助他们提高开发效率、优化用户体验、提供更好的交互和视觉效果。

这10个代码段分别是:
1. 获取URL参数
2. 倒计时
3. 防抖
4. 节流
5. 数组去重
6. 判断数组是否相等
7. 判断对象是否相等
8. 手写Promise
9. 发送异步请求
10. 判断浏览器类型

下面我将逐一介绍它们的使用方法。

二、获取URL参数

这个代码段可以在网址中获取指定参数的值,比如网址中有“http://www.xxx.com?name=xxx”,我们可以使用以下代码获取该网址的name参数值:

function getParam(name) {
  var search = location.search.slice(1);
  var arr = search.split("&");
  for (var i = 0; i < arr.length; i++) {
    var keyValuePair = arr[i].split("=");
    if (keyValuePair[0] === name) {
      return decodeURIComponent(keyValuePair[1]);
    }
  }
}
console.log(getParam("name")); //xxx

三、倒计时

这个代码段可以实现倒计时效果,比如在秒杀抢购时,可以通过该代码段实现秒杀倒计时:

function countDown(endDateStr) {
  var endDate = new Date(endDateStr).getTime();
  var timerId = setInterval(function () {
    var now = new Date().getTime();
    var distance = endDate - now;
    var days = Math.floor(distance / (1000 * 60 * 60 * 24));
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    console.log(days + "天 " + hours + "小时 " + minutes + "分钟 " + seconds + "秒 ");
    if (distance < 0) {
      clearInterval(timerId);
      console.log("倒计时结束");
    }
  }, 1000);
}

countDown("2022-01-01"); //倒计时至2022年1月1日

四、防抖

这个代码段可以避免频繁触发函数,适用于节流或防止频繁点击等场景。

function debounce(fn, delay) {
  var timer = null;
  return function () {
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(this, arguments);
    }, delay);
  };
}

var fn = function () {
  console.log("防抖成功");
};

var debounceFn = debounce(fn, 500);

window.addEventListener("scroll", debounceFn);

五、节流

这个代码段可以限制函数的执行频率,适用于动态加载等场景。

function throttle(fn, threshhold) {
  var timer, last;
  return function () {
    var context = this;
    var now = +new Date();
    var args = arguments;
    if (last && now < last + threshhold) {
      clearTimeout(timer);
      timer = setTimeout(function () {
        last = now;
        fn.apply(context, args);
      }, threshhold);
    } else {
      last = now;
      fn.apply(context, args);
    }
  };
}

var fn = function () {
  console.log("节流成功");
};

var throttleFn = throttle(fn, 500);

window.addEventListener("scroll", throttleFn);

六、数组去重

这个代码段可以去除数组中的重复元素,可以使用foreach遍历数组中的元素,一旦发现重复的元素,就将其删除即可。

function unique(arr) {
  var obj = {};
  var res = [];
  arr.forEach(function (item) {
    if (!obj[item]) {
      obj[item] = true;
      res.push(item);
    }
  });
  return res;
}

console.log(unique([1, 1, 2, 2, 3, 3])); //[1, 2, 3]

七、判断数组是否相等

这个代码段可以判断两个数组是否相等,不同于对象的判断,数组的判断需要先比较数组的长度,再逐一比较数组中的元素。

function isEqualArray(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (var i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) {
      return false
    }
  }
  return true;
}

console.log(isEqualArray([1, 2, 3], [1, 2, 3])); //true
console.log(isEqualArray([1, 2, 3], [1, 3, 2])); //false

八、判断对象是否相等

这个代码段可以判断两个对象是否相等,在判断对象相等时需要先比较对象的属性名,再逐一比较属性值。

function isEqualObject(obj1, obj2) {
  var props1 = Object.getOwnPropertyNames(obj1);
  var props2 = Object.getOwnPropertyNames(obj2);
  if (props1.length !== props2.length) {
    return false;
  }
  for (var i = 0; i < props1.length; i++) {
    var propName = props1[i];
    if (obj1[propName] !== obj2[propName]) {
      return false;
    }
  }
  return true;
}

var obj1 = { name: "Tom", age: 20 };
var obj2 = { name: "Tom", age: 20 };
console.log(isEqualObject(obj1, obj2)); //true

var obj3 = { name: "Pete", age: 25 };
console.log(isEqualObject(obj1, obj3)); //false

九、手写Promise

这个代码段可以手写一个符合Promise规范的Promise,并且支持链式调用。

function Promise(fn) {
  var self = this;
  self.status = "pending";
  self.data = undefined;
  self.onResolvedCallback = [];
  function resolve(value) {
    if (self.status === "pending") {
      self.status = "resolved";
      self.data = value;
      self.onResolvedCallback.forEach(function (callback) {
        callback(value);
      });
    }
  }
  try {
    fn(resolve);
  } catch (error) {
    reject(error);
  }
}
Promise.prototype.then = function (onResolved) {
  var self = this;
  return new Promise(function (resolve) {
    function handle(onResolved) {
      var result = onResolved(self.data);
      if (result instanceof Promise) {
        result.then(resolve);
      } else {
        resolve(result);
      }
    }
    if (self.status === "pending") {
      self.onResolvedCallback.push(function () {
        handle(onResolved);
      });
    } else {
      handle(onResolved);
    }
  });
};

十、发送异步请求

这个代码段可以使用XMLHttpRequest对象发送异步请求,当请求成功后,会调用回调函数,处理响应数据。

function ajax(method, url, data, success, fail) {
  var xhr = new XMLHttpRequest();
  xhr.open(method, url, true);
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      success(xhr.responseText);
    } else {
      fail(xhr.status);
    }
  };
  xhr.send(data);
}

ajax("GET", "/api", "", function (res) {
  console.log(res);
}, function (err) {
  console.log(err);
});

结语

以上就是极力推荐10个短小实用的JavaScript代码段的攻略,这些代码段可以帮助前端开发者更好地完成项目开发和优化用户体验,但是在使用这些代码段时,需要根据具体的场景进行灵活应用,避免滥用而影响性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:极力推荐10个短小实用的JavaScript代码段 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • JavaScript 数组遍历的五种方法

    JavaScript 数组遍历的五种方法如下: 1. forEach() array.forEach(function(currentValue, index, arr), thisValue) forEach() 方法用于调用数组中的每个元素,并将元素传递给回调函数。该方法不会返回新的数组,而是在原始数组中执行回调函数。回调函数可以接收三个参数:当前元素的…

    JavaScript 2023年5月27日
    00
  • JavaScript箭头(arrow)函数详解

    JavaScript箭头(arrow)函数详解 箭头函数的概念 Arrow Function 是 ECMAScript 6 引入的新特性,通常又称为箭头函数。它是一种更简洁、更易读、更简单的函数定义方式。 箭头函数表达式语法形如: (param1, param2, …, paramN) => { statements } 箭头函数完整语法可以看做简化版…

    JavaScript 2023年5月27日
    00
  • JavaScript中string转换成number介绍

    当需要在JavaScript中使用数字时,需要将字符串转换为数字。在JavaScript中有三种方式可以将字符串转换为数字类型:Number(), parseInt() 和 parseFloat()。下面对这三种方式进行详细介绍。 Number()方法: Number()方法可以把任何JavaScript对象转换为数字。如果对象是一个字符串,字符串只包含数字…

    JavaScript 2023年5月28日
    00
  • JavaScript通过filereader接口读取文件

    下面详细讲解JavaScript通过filereader接口读取文件的完整攻略: 1. Filereader介绍 FileReader是H5新增的文件读取对象,通过FileReader对象,web应用程序可以异步读取存储在用户计算机上的文件内容,使用FileReader可以读取文本、图片(base64字符串)、音频和视频等格式的文件。下面我们将介绍如何利用F…

    JavaScript 2023年5月27日
    00
  • 一文了解你不知道的JavaScript生成器篇

    一文了解你不知道的JavaScript生成器篇 简介 JavaScript的生成器(Generator)是ES6新引入的一个特性,可以使我们更加方便地控制异步代码流程,使代码更加简洁易懂。本文将介绍JavaScript生成器的基本语法、使用方法及示例,以帮助开发者快速掌握这一特性。 生成器语法 生成器语法使用function*定义一个生成器函数,通过yiel…

    JavaScript 2023年5月28日
    00
  • javascript如何定义对象数组

    JavaScript 是一种面向对象的编程语言,支持使用对象进行编程。对象数组则是在 JavaScript 中一种常用的数据结构,通常使用对象数组存储一组相关的数据。定义对象数组可以通过以下步骤进行: 步骤一:定义对象的属性 首先,需要定义对象的属性。对象属性是一个键值对,其中“键”表示属性的名称,“值”则是属性的值。可以使用常规的 JavaScript 对…

    JavaScript 2023年5月27日
    00
  • asp.net+ajax的Post请求实例

    下面是关于“ASP.NET+Ajax的post请求实例”的攻略。 什么是Ajax? Ajax(Asynchronous JavaScript and XML)是一种用于创建 Web 应用的技术。它可以让浏览器不重新加载整个页面的情况下,动态地更新页面上的一部分内容。使用 Ajax 技术可以使网页更加流畅和响应。 什么是ASP.NET? ASP.NET 是一种…

    JavaScript 2023年6月11日
    00
  • js实现简洁的滑动门菜单(选项卡)效果代码

    下面我将详细讲解“js实现简洁的滑动门菜单(选项卡)效果代码”的完整攻略。 一、需求分析 我们需要实现一个简洁的滑动门菜单效果,点击菜单选项时,显示对应的内容区域,同时将当前选项高亮显示。具体实现步骤如下: 定义html结构,包含菜单选项和对应的内容区域。 使用CSS设置菜单选项和内容区域的布局样式,使其呈现滑动门效果。 使用JavaScript实现点击事件…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部