jsperfjsfiddleJSBench JavaScript 代码片段的执行速度。 通过简单而简短的 URL 与他人在线共享和协作。| 测试条件 | Chrome版本94.0.4606.81 | Firefox版本93.0 (64 位) |
|---|---|---|
| Object.assign对象合并 | 14.07080078125 ms | 12.11 ms |
| 展开运算符对象合并 | 18201.126953125 ms | 7424.69 ms |
| 展开运算符数组加单个 | 42.848876953125 ms | 877.14 ms |
| push方法数组加单个 | 0.489013671875 ms | 0.89 ms |
| concat方法数组加单个 | 0.6640625 ms | 2.40 ms |
| 展开运算符两个大数组合并 | 38.1337890625 ms | 43.64 ms |
| concat方法两个大数组合并 | 4.3740234375 ms | 31.28 ms |
在循环比较多或者操作的数组长度比较大的情况下:
Object.assign 多数情况下性能比 展开运算符(...) 的性能高connat、push 性能比 展开运算符(...) 的性能高在 Chrome版本94.0.4606.81 、 Firefox版本93.0 (64 位) 的浏览器下
Object.assign、connat 的性能会比 展开运算符“...” 的性能高Object.assign 会触发 Proxy/Object.definedProperty 的 set 方法,展开运算符“...” 不会触发Object.assign 和 展开运算符 都是浅拷贝展开运算符放在前面的性能比放在后面的性能高function (a, ...b) {})的时候,有自己的使用方式展开运算符“...” 比 Object.assign 性能高getBoundingClientRect 返回的是一个 DOMRect 对象,是一组矩形集合,我们这次所使用的返回值主要是left、top、bottom和right。其余的返回值width、height、x、y这次用不到,就不再讨论。
使用方法如下:
let domToTop = dom.getBoundingClientRect().top // dom 的顶边到视口顶部的距离let domToLeft = dom.getBoundingClientRect().left // dom 的左边到视口左边的距离let domToBottom = dom.getBoundingClientRect().bottom // dom 的底边到视口顶部的距离let domToRight = dom.getBoundingClientRect().right // dom 的右边到视口左边的距离
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>.box {width: 110%;height: 200%;position: absolute;top: 0;left: 0;border: 1px solid red;}.content {width: 20%;
想要的效果
输入: let str ="<div><span>tests</span></div>"输出 : {tag: 'div',children: [{tag: 'span'},],}
实现
// 设置每个节点标签属性// let attrRE = /\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function parseTag(tag) {let res = {type: "tag",name: "",voidElement: false,attrs: {},children: [],};let tagMatch = tag.match(/<\/?([^\s]+?)[/\s>]/);if (tagMatch) {// 标签名称为正则匹配的第2项res.name = tagMatch[1];if (tag.charAt(tag.length - 2) === "/") {// 判断tag字符串倒数第二项是不是 / 设置为空标签。 例子:<img/>res.voidElement = true;}}// 匹配所有的标签正则let classList = tag.match(/\s([^'"/\s><]+?)\s*?=\s*?(".*?"|'.*?')/g);if (classList && classList.length) {for (let i = 0; i < classList.length; i++) {// 去空格再以= 分隔字符串 得到['属性名称','属性值']
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]function promiseForEach(arr, cb) {let realResult = []let result = Promise.resolve()arr.forEach((a, index) => {result = result.then(() => {if (typeof cb === "function") {return cb(a).then((res) => {realResult.push(res)})}})})return result.then(() => {return realResult})}promiseForEach(arr, (ele) => {return new Promise((resolve, reject) => {setTimeout(() => {console.log(ele)return resolve(ele)}, Math.random() * 1000)})}).then((data) => {console.log("成功")console.log(data)}).catch((err) => {console.log("失败")console.log(err)})
/*** 复制文本* @param text*/export function copyText(text) {const input = document.createElement("input")input.value = textdocument.body.appendChild(input)input.select()document.execCommand("Copy")window.setTimeout(function () {document.body.removeChild(input)}, 0)}/*** esc监听全屏*/export const listenfullscreen = (callback) => {function listen() {callback()}document.addEventListener("fullscreenchange", function () {listen()})document.addEventListener("mozfullscreenchange", function () {listen()})document.addEventListener("webkitfullscreenchange", function () {listen()})document.addEventListener("msfullscreenchange", function () {listen()})}/*** 浏览器判断是否全屏*/export const fullscreenEnable = () => {return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen}/*** 浏览器全屏*/export const re
Number.prototype.toFixed = function (n) {if (n != undefined && (isNaN(n) || Number(n) > 17 || Number(n) < 0)) {throw new Error("输入正确的精度范围");}// 拆分小数点整数和小数var num = this;var f = '';if (Number(num) < 0) {num = -Number(num);f = '-';}var numList = num.toString().split(".");// 整数var iN = numList[0];// 小数var dN = numList[1];n = parseInt(n);if (isNaN(n) || Number(n) === 0) {// 0或者不填的时候,按0来处理if(dN === undefined){return num + '';}var idN = Number(dN.toString().substr(0, 1));if (idN >= 5) {if (Number(iN) < 0) {iN = Number(iN) - 1} else {iN = Number(iN) + 1}}return iN + '';} else {var dNL = dN === undefined ? 0 : dN.length;if (dNL < n) {// 如果小数位不够的话,那就补全var oldN = num.toString().ind