极力推荐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日

相关文章

  • 找到一点可怜的关于dojo资料,谢谢作者!

    感谢您对Dojo资料的关注。如果您希望获取一些关于Dojo的基础知识或者文档,可以采取以下步骤: 访问Dojo官方网站(https://dojotoolkit.org/)Dojo的官方网站包含了官方文档、示例、API等大量资料。您可以在该网站的文档资源(Documentation Resources)中寻找您需要的资料,或者在源代码库(Source Code…

    JavaScript 2023年6月11日
    00
  • javascript下使用Promise封装FileReader

    下面我将详细讲解如何在JavaScript中使用Promise封装FileReader。 什么是Promise? 在介绍如何使用Promise封装FileReader之前,先来简述一下Promise的概念。 Promise是一种异步编程的解决方案,它可以优雅地处理回调地狱(callback hell)问题,使得异步操作更为简洁、可读性更强。 使用Promis…

    JavaScript 2023年6月11日
    00
  • Javascript中的包装类型介绍

    当我们在Javascript中使用基本数据类型(如数字、布尔值、字符串)时,这些数据类型会隐式地转换为对应的包装类型(Number、Boolean、String)。这些包装类型使用对象的方式来包装基本类型,使得它们能够像对象一样调用方法和属性。以下是Javascript中的三个包装类型介绍: Number Number对象是数字的包装类型。它们支持许多有用的…

    JavaScript 2023年5月28日
    00
  • JavaScript全解析——this指向

    本系列内容为JS全解析,为千锋教育资深前端老师独家创作 致力于为大家讲解清晰JavaScript相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ this指向(掌握) this 是一个关键字,是一个使用在作用域内的关键字 作用域分为全局作用域和局部作用域(私有作用域或者函数作用域) 全局作用域 全局作用域中this指…

    JavaScript 2023年5月11日
    00
  • 微信小程序单选框自定义赋值

    微信小程序中的单选框组件通常会使用预设选项进行赋值。但有时候,我们需要自定义单选框的选项内容和值。下面是一些实现自定义单选框赋值的方法: 方式一:使用wx:for循环渲染视图和数据 我们可以使用wx:for指令和数组来实现自定义单选框赋值。首先,定义一个数组用于存储单选框的选项,数组中每一项表示单选框的一个选项,包含一个name属性表示选项文本,一个valu…

    JavaScript 2023年6月11日
    00
  • JavaScript switch case

    JavaScript switch case语句是一种用于多个分支情况的控制流语句。它与if-else语句相似,但要更加简洁和易于阅读。通常来说,switch case可帮助开发人员避免编写过多的if-else嵌套,从而提高代码效率。 下面是JavaScript switch case的语法: switch(expression) { case value1…

    Web开发基础 2023年3月30日
    00
  • Jquery 一次处理多个ajax请求的代码

    如果需要同时处理多个ajax请求,Jquery提供了一些方便的解决方案。 方案一:使用Jquery的when()方法 当需要同时处理多个ajax请求时,可以使用Jquery的when()方法。该方法接受多个deferred对象,使所有的deferred对象完成时返回一个回调函数。 示例代码: var jqXHR1 = $.ajax(‘/api/url1’);…

    JavaScript 2023年6月11日
    00
  • VBS.Runauto脚本病毒分析篇

    下面我将详细讲解“VBS.Runauto脚本病毒分析篇”的完整攻略,希望对您有所帮助。 简介 VBS.Runauto是一种常见的脚本病毒,会自动启动并感染系统中的许多文件。本篇攻略将介绍如何对VBS.Runauto进行分析,并提供两个示例说明。 准备工作 在开始分析之前,需要准备以下工具: 文本编辑器,如Notepad++ 反编译工具,如IDA Pro 虚拟…

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