JavaScript

精度

November 12, 2020
JavaScript

遇到的问题 # 在 JS 中计算数字经常会遇到精度的问题。使一些判断语句出现bug。 1 2 3 4 5 1.1 * 100 === 110 // 110.00000000000001 0.1 + 0.2 === 0.3 // 0.30000000000000004 解决方法 # 不使用严格相等(==或===)来做判断,容忍两个数之间有一个很小的误差。 1 2 3 function eq(left, right) { Math.abs(left - right) < 0.000001 } 原理 # 比如正常的比较,0.1 + 0.2 === 0.3 相当于 0.1 + 0.2 - 0.3 === 0 。bug就出现在不是等于零,而是一个很小很小的数。这个很小很小的数就使误差。如果误差在可接受范围内,我们就还可以认为它们使相等的。 这个误差,可以通过 Number.EPSILON1 来设置。具体设置成多少我还不知道,可能要根据做的业务的情况来确定吧。 1 2 3 function eq(left, right) { return Math.abs(left - right) < Number. ...

获取滚动高度

April 18, 2020
JavaScript
api

获取滚动高度 # 1 2 3 4 5 6 7 8 9 10 11 function getPageScrollY() { let yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict yScroll = document.documentElement.scrollTop; } else if (document.body) {// all other Explorers yScroll = document.body.scrollTop; } return yScroll; }; 也可以window.scrollY

正则表达式

August 25, 2019
JavaScript

精准匹配 # 一个字符跟着一个字符,完全匹配 /test/ 匹配一类字符 # 匹配组合中的任意一个👇 [abc] 除了组合中的所有👇 [^abc] ☢️歧义:^有2中含义:在[]中表示“非”,在正则表达式的开头/^abc/,表示匹配以abc开头的字符串。 从a到m之间👇 [a-m] 转义 # 字母和数字都可以表示自己。但$``-``^可以表达自身以外的东西,要使用反斜杠“\”来转义。 重复 # /t?est/👉字符后加?表示一次或零次出现 /t+est/👉+表示一次或多次出现 /t*est/👉 *表示零次或多次出现 /t{4}est/👉{4}表示4次出现 /t{4,10}est/👉{4-10}表示4-10次出现 /t{4,}est/👉{4,}表示4-多次出现 预定义字符 # \t表示水平制表符tab \s表示任何空字符,如空格、tab、回车等 还有很多 分组 # 操作符(如+``*``?)只能影响它前面的术语。使用小括号()可以使操作符作用于一组术语。 例子:/(ab)+/会匹配"ab"字符串一次或多次。 ☢️歧义:()同时还有捕获的作用。 或 # 使用竖线表示或的关系,比如/a|b/匹配a或b,与/[ab]/类似 反向引用 # 看这个正则/^([abc])a\1)/,其中()为捕获,可能捕获到a或b或c,\1就表示被捕获到的那个字符。 比如,对于字符串bab,首先([abc])捕获到了b,\1就代表b,所以bab可以匹配。 捕获及捕获的引用 # /(hello) (world)/ 在匹配字符串 hello world 时会将 () 中的字符进行捕获,可以用 $1 $2 表示。 在string.replace()中,使用"$1"表示被捕获到的字符。 比如,'hello world'.replace(/(hello) (world)/, '$1 666-$2'),会输出"hello 666-world" (?: . . .)表示非捕获分组,也就是不会被捕获,仅表示分组。 trim()的实现 # 方法1 # str. ...