基础util
U1、x-ca-nonce/uuid生成
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/xy/g, (function(e){
const r = (Math.randow() * 16) | 0;
const s = e === 'x' ? r : (r & 0x3) | 0x8;
return s.toString(16);
}))
U2、闰年判断 ((year%4 === 0 && year%100 !== 0) || year%400 === 0)
U3、乘法表
for (let i = 9; i > 0; i--) {
let str = '';
for (let j = 1; j <= i; j++) {
str += j+"*"+i+"="+j*i + ' ';
}
console.log(str);
}
U3、字符串去头尾空白符 str.trim()或者(str || '').replace(/^\s+|\s+$/g, '')
JS概念
G1、JavaScript == 与 === 区别
JavaScript数据有基数类型、高级类型两种
==一般先统一数据类型再比较值,===先比较数据类型再比较值
G1.1、基础类型之间比较:类型不同下,==将类型统一再比较值,===比较类型返回false;类型相同下==和===都比较值;
G1.2、高级类型之间比较:==和===都是比较“指针地址”是否相同;
G1.3、基础类型和高级类型之间比较:==将高级类型转为基础类型,再进行值的比较返回false,===比较数据类型返回false;
G2、正则表达式速查表
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n ”匹配字符“n ”。“\n ”匹配一个换行符。串行“\\ ”匹配“\ ”而“\( ”则匹配“( ”。 |
^ | 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n ”或“\r ”之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n ”或“\r ”之前的位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配“z ”以及“zoo ”。*等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,“zo+ ”能匹配“zo ”以及“zoo ”,但不能匹配“z ”。+等价于{1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)? ”可以匹配“does ”或“does ”中的“do ”。?等价于{0,1}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,“o{2} ”不能匹配“Bob ”中的“o ”,但是能匹配“food ”中的两个o。 |
{n,} | n是一个非负整数。至少匹配n次。例如,“o{2,} ”不能匹配“Bob ”中的“o ”,但能匹配“foooood ”中的所有o。“o{1,} ”等价于“o+ ”。“o{0,} ”则等价于“o* ”。 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3} ”将匹配“fooooood ”中的前三个o。“o{0,1} ”等价于“o? ”。请注意在逗号和两个数之间不能有空格。 |
? | 当该字符紧跟在任何一个其它限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo ”,“o+? ”将匹配单个“o ”,而“o+ ”将匹配所有“o ”。 |
. | 匹配除“\ n ”之外的任何单个字符。要匹配包括“\ n ”在内的任何字符,请使用像“(.|\n) ”的模式。 |
(pattern) | 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\( ”或“\) ”。 |
(?:pattern) | 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|) ”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies) ”就是一个比“industry|industries ”更简略的表达式。 |
(?=pattern) | 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000) ”能匹配“Windows2000 ”中的“Windows ”,但不能匹配“Windows3.1 ”中的“Windows ”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern) | 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000) ”能匹配“Windows3.1 ”中的“Windows ”,但不能匹配“Windows2000 ”中的“Windows ”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 |
(?<=pattern) | 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows ”能匹配“2000Windows ”中的“Windows ”,但不能匹配“3.1Windows ”中的“Windows ”。 |
(?<!pattern) | 反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows ”能匹配“3.1Windows ”中的“Windows ”,但不能匹配“2000Windows ”中的“Windows ”。 |
x|y | 匹配x或y。例如,“z|food ”能匹配“z ”或“food ”。“(z|f)ood ”则匹配“zood ”或“food ”。 |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如,“[abc] ”可以匹配“plain ”中的“a ”。 |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如,“[^abc] ”可以匹配“plain ”中的“p ”。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,“[a-z] ”可以匹配“a ”到“z ”范围内的任意小写字母字符。 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z] ”可以匹配任何不在“a ”到“z ”范围内的任意字符。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b ”可以匹配“never ”中的“er ”,但不能匹配“verb ”中的“er ”。 |
\B | 匹配非单词边界。“er\B ”能匹配“verb ”中的“er ”,但不能匹配“never ”中的“er ”。 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c ”字符。 |
\d | 匹配一个数字字符。等价于[0-9]。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 |
\f | 匹配一个换页符。等价于\x0c和\cL。 |
\n | 匹配一个换行符。等价于\x0a和\cJ。 |
\r | 匹配一个回车符。等价于\x0d和\cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于\x09和\cI。 |
\v | 匹配一个垂直制表符。等价于\x0b和\cK。 |
\w | 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_] ”。 |
\W | 匹配任何非单词字符。等价于“[^A-Za-z0-9_] ”。 |
\xn | 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41 ”匹配“A ”。“\x041 ”则等价于“\x04&1 ”。正则表达式中可以使用ASCII编码。. |
\num | 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1 ”匹配两个连续的相同字符。 |
\n | 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。 |
\nm | 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 |
\nml | 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 |
\un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。 |
常用正则表达式
用户名 | /^[a-z0-9_-]{3,16}$/ |
---|---|
密码 | /^[a-z0-9_-]{6,18}$/ |
十六进制值 | /^#?([a-f0-9]{6}|[a-f0-9]{3})$/ |
电子邮箱 | /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/ /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/ |
URL | /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ |
IP 地址 | /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ |
HTML 标签 | /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/ |
删除代码\\注释 | (?<!http:|\S)//.*$ |
Unicode编码中的汉字范围 | /^[\u2E80-\u9FFF]+$/ |
windows(?=pattern); 正向肯定预检
(?<=pattern)windows; 反向肯定预检
windows(?!pattern); 正向否定预检
(?<!pattern)windows; 反向否定预检
G3、HTML5速查表
标签 | 描述 | 版本 | 属性 |
---|---|---|---|
<!--...--> | 定义注释 | 4 / 5 | none |
<!DOCTYPE> | 定义文档类型 | 4 / 5 | none |
<a> | 定义超链接,用于从一个页面链接到另一个页面。 | 4 / 5 | href | hreflang | media | ping | rel | target | type |
<abbr> | 定义缩写 | 4 / 5 | 全局属性 |
<acronym> | 定义首字母缩写 | 4 | - |
<address> | 定义文档作者或拥有者的联系信息 . | 4 / 5 | 全局属性 |
<applet> | 定义嵌入的 applet | 4 | - |
<area> | 定义图像映射内部的区域(图像映射指的是带有可点击区域的图像)。 | 4 / 5 | alt | coords | href | hreflang | media | ping | rel | shape | target | type |
<article> | 定义独立的内容 | 5 | 全局属性 |
<aside> | 定义页面内容之外的内容 | 5 | 全局属性 |
<audio> | 定义声音,比如音乐或其他音频流。 | 5 | autobuffer | autoplay | controls | loop | src |
<b> | 定义粗体文本 , 用于强调某些文本 | 4 / 5 | 全局属性 |
<base> | 定义页面上的所有链接规定默认地址或默认目标 | 4 / 5 | href | target |
<basefont> | 定义文档中所有文本的默认颜色、大小和字体 | 4 | - |
<bb> | 定义文本的文本方向,使其脱离其周围文本的方向设置。 | 5 | type |
<bdi> | 指的是 bidi 隔离, 允许您设置一段文本,使其脱离其父元素的文本方向设置 . | 5 | dir |
<bdo> | 定义文本显示的方向。 | 4 / 5 | dir |
<big> | 定义大号文本。 | 4 | - |
<blockquote> | 定义摘自另一个源的块引用 。 | 4 / 5 | cite |
<body> | 定义文档的主体 。 | 5 | 全局属性 |
<br> | 插入换行符。 | 4 / 5 | 全局属性 |
<button> | 定义按钮。 | 4 / 5 | autofocus | disabled | form | formaction | formenctype | formme-thod | formnovalidate | formtarget | name | type | value |
<canvas> | 定义图形,比如图表和其他图像 | 5 | height | width |
<caption> | 定义表格标题。 | 4 / 5 | 全局属性 |
<center> | 定义居中的文本。 | 4 | - |
<cite> | 定义作品(比如书籍、歌曲、电影、电视节目、绘画、雕塑等等)的标题。 | 4 / 5 | 全局属性 |
<code> | 定义计算机代码文本。 | 4 / 5 | 全局属性 |
<col> | 定义为表格中的一个或多个列定义属性值。 。 | 4 / 5 | span |
<colgroup> | 定义对表格中的列进行组合,以便对其进行格式化。 | 4 / 5 | span |
<command> | 定义命令按钮。 | 5 | checked | default | disabled | hidden | icon | label | radiogroup | type |
<datagrid> | 定义可选数据的列表。 datagrid 作为树列表来显示。 | 5 | disabled | multipe |
<datalist> | 定义下拉列表。 请与 input 元素配合使用该元素,来定义 input 可能的值。 | 5 | 全局属性 |
<dd> | 定义一个定义列表中对项目的描述 。 | 4 / 5 | 全局属性 |
<del> | 定义删除文本。 | 4 / 5 | cite | datetime |
<details> | 定义描述文档或文档某个部分的细节。 | 5 | open |
<dialog> | 定义对话,比如交谈 | 5 | 全局属性 |
<dir> | 定义目录列表。 | 4 | - |
<div> | 定义文档中的一个部分。 | 4 / 5 | 全局属性 |
<dfn> | 定义一个定义项目。 | 4 / 5 | title |
<dl> | 定义一个定义列表 . | 4 / 5 | 全局属性 |
<dt> | 定义一个定义列表中的一个项目。 | 4 / 5 | 全局属性 |
<em> | 呈现为被强调的文本。 | 4 / 5 | 全局属性 |
<embed> | 定义嵌入的内容,比如插件 | 5 | height | src | type | width |
<fieldset> | 定义用于从逻辑上将表单中的元素组合起来。 | 4 / 5 | disabled | form | name |
标签 | 描述 | 版本 | 属性 |
---|---|---|---|
<figcaption> | 定义 fiqure 元素的标题(caption)。 | 5 | 全局属性 |
<figure> | 规定独立的流内容(图像、图表、照片、代码等等)。 | 5 | 全局属性 |
<font> | 规定文本的字体、大小和颜色。 | 4 | - |
<footer> | 定义 section 或 document 的页脚。 | 5 | 全局属性 |
<form> | 用于创建供用户输入的 HTML 表单 | 4 / 5 | action | date | replace | accept | accept-charset | enctype | method | target |
<frame> | 定义子窗口(框架) | 4 | - |
<frameset> | 定义框架集。 | 4 | - |
<h1> to <h6> | 定义标题。<h1> 定义最大的标题。<h6> 定义最小的标题 | 4 / 5 | 全局属性 |
<heda> | 所有头部元素的容器。位于 <head> 内部的元素可以包含脚本、指引浏览器找到样式表、提供元信息,等等。 | 4 / 5 | 无 |
<header> | 定义文档的页眉(介绍信息)。 | 5 | 全局属性 |
<hgroup> | 用于对网页或区段(section)的标题进行组合。 | 4 / 5 | 全局属性 |
<hr> | 水平线,它应该定义内容中的主题变化 | 4 / 5 | 全局属性 |
<html> | 告知浏览器这是一个 HTML 文档。 | 4 / 5 | manifest |
<i> | 呈现斜体的文本。 | 4 / 5 | 全局属性 |
<iframe> | 创建包含另一个文档的行内框架。 | 4 / 5 | src | name | sandbox | seamless | width | height |
<img> | 定义 HTML 页面中的图像。 | 4 / 5 | alt | src | height | ismap | usemap | width |
<input> | 规定用户可输入数据的输入字段。 | 4 / 5 | accept | alt | auto-complete | autofocus | checked | disabled | from | formaction | formenctype | formme-thod | formnovalidate | formtarget | height | list | max | maxiength | min | multipe | name | pattern | placeholder | readonly | required | size | src | step | type | value | width |
<ins> | 定义文档的其余部分之外的插入文本。 | 4 / 5 | cite | datetime |
<isindex> | 定义单行的输入域。 | 4 | - |
<keygen> | 规定用于表单的密钥对生成器字段。 | 5 | autofocus | challenge | disabled | form | keytype | name |
<kbd> | 定义键盘文本。它表示文本是从键盘上键入的。它经常用在与计算机相关的文档或手册中。 | 4 / 5 | 全局属性 |
<label> | 为 input 元素定义标签(label) | 4 / 5 | for | form |
<legend> | 为以下元素定义标题(caption):<fieldset>、<figure>、<details>。 | 4 / 5 | 全局属性 |
<li> | 定义列表项,有序列表和无序列表中都使用 <li> 标签。 | 4 / 5 | value |
<link> | 定义文档与外部资源之间的关系。 大多数时候都用来连接样式表。 | 4 / 6 | href | rel | media | hreflang | type | sizes |
<mark> | 定义带有记号的文本。请在需要突出显示文本时使用 <m> 标签 | 5 | 全局属性 |
<map> | 定义客户端图像映射。图像映射指的是带有可点击区域的图像。 | 4 / 5 | label | type |
<menu> | 定义菜单列表。当希望列出表单控件时使用该标签。 | 5 | autosubmit | compact | label | type |
<meta> | 可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。 | 5 | charset | content | http-equiv | name | scheme |
<meter> | 定义度量衡。仅用于已知最大和最小值的度量。 | 5 | high | low | max | min | optimum | value |
<nav> | 定义导航链接的部分。 | 5 | 全局属性 |
<noframes> | 向浏览器显示无法处理框架的提示文本。 | 4 | - |
<noscript> | 定义在脚本未被执行时的替代内容(文本)。 | 4 / 5 | 无 |
<object> | 定义一个嵌入的对象。 | 4 / 5 | data | height | type | usemap | width | object |
---|---|---|---|
<ol> | 定义有序列表。 | 4 / 5 | compact | start | reversed |
<optgroup> | 定义选项组。此元素允许您组合选项。当您使用一个长的选项列表时,对相关的选项进行组合会使处理更加容易。 | 4 / 5 | disabled | label |
<option> | 定义下拉列表中的一个选项。 | 4 / 5 | disabled | label | selected | value |
<output> | 定义不同类型的输出,比如脚本的输出。 | 5 | form | for | name |
<p> | 定义段落 | 4 / 5 | 全局属性 |
<param> | 允许您为插入 XHTML 文档的对象规定 run-time 设置,也就是说,此标签可为包含它的 <object> 标签提供参数。 | 4 / 5 | name | value | type | valuetype |
<pre> | 定义预格式化文本。 | 4 / 5 | 全局属性 |
<progress> | 定义运行中的进度(进程)。 | 5 | max | value |
<q> | 定义一个短的引用。 | 4 / 5 | cite |
<ruby> | 定义 ruby 注释。 | 5 | 全局属性 |
<rp> | 定义若浏览器不支持 ruby 元素显示的内容。 | 5 | 全局属性 |
<rt> | 义 ruby 注释的解释。 | 5 | 全局属性 |
<s> | 定义加删除线的文本 | 4 | - |
<samp> | 定义样本计算机代码。 | 4 / 5 | 全局属性 |
<script> | 定义脚本。 | 4 / 5 | async | type | defer | src | charset |
<section> | 定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分 | 5 | cite |
<select> | 创建下拉列表 | 4 / 5 | autofocus | data | disabled | form | multiple | name |
<small> | 将旁注 (side comments) 呈现为小型文本。 | 4 / 5 | 全局属性 |
<source> | 为媒介元素(比如 <video> 和 <audio>)定义媒介资源。 | 5 | media | src | type |
<span> | 用于对文档中的行内元素进行组合 | 4 / 5 | 全局属性 |
<strike> | 定义加删除线的文本。 | 4 | - |
<strong> | 定义重要的文本 . | 4 / 5 | 全局属性 |
<style> | 定义 HTML 文档的样式信息。 | 4 / 5 | media | type | scoped |
<sub> | 定义下标文本 | 4 / 5 | 全局属性 |
<sup> | 定义上标文本。 | 4 / 5 | 全局属性 |
<summary> | 包含 details 元素的标题,"details" 元素用于描述有关文档或文档片段的详细信息。 | 4 / 5 | 全局属性 |
<table> | 定义 HTML 表格 | 4 / 5 | 全局属性 |
<tbody> | 定义表格的主体。 | 4 / 5 | 全局属性 |
<td> | 定义表格单元 | 4 / 5 | colspan | rowspan | headers |
<textarea> | 定义一个文本区域 (text-area) (一个多行的文本输入区域)。 | 4 / 5 | autofocus | cols | disabled | form | name | feadonly | required | required | rows | maxlength | placeholder | wrap |
<tfoot> | 定义表格的页脚(脚注) | 4 / 5 | 全局属性 |
<th> | 定义 HTML 表格中的表头单元格。 | 4 / 5 | colspan | rowspan | scope |
<thead> | 定义表格的表头。 | 4 / 5 | 全局属性 |
<time> | 定义公历的时间(24 小时制)或日期,时间和时区偏移是可选的。 | 5 | datetime |
<title> | 定义文档的标题 | 4 | 无 |
<tr> | 定义表格中的行。 | 4 / 5 | 全局属性 |
<track> | 为诸如 video 元素之类的媒介规定外部文本轨道。 | 5 | default | kind | label | src | srclang |
<tt> | 定义打字机文本。 | 4 | - |
<u> | 定义下划线文本 。 | 4 | - |
<ul> | 定义无序列表。 | 4 / 5 | 全局属性 |
<var> | 定义变量。 | 4 / 5 | 全局属性 |
<video> | 定义视频,比如电影片段或其他视频流。 | 5 | src | poster | autobuffer | autoplay | loop | controls | width | height |
<xmp> | 定义预格式文本。 | 4 | - |
G4、0.1 + 0.2 != 0.3
JavaScirpt 使用 Number 类型来表示数字(整数或浮点数),遵循 IEEE 754 标准,通过 64 位双精度浮点数来表示的一个number类型变量。
IEEE 754 标准定义如何用二进制来存储浮点数,根据公式:
V=(-1)N x M x 2^R(128=(-1)^(0)x1x2^7)
其中:
N=为符号位,N=1,则为负数;N=0,则为正数
M=底数(尾数)
R=幂(指数)
三部分(N、M、R)分开存储组成一个浮点数。
64位分别表示:
1 符号位, 0 表示正数, 1 表示负数 N
52 尾数,小数部分(即有效数字) M
11 指数位(e) R
法一、(0.1 * 1000 + 0.2 * 1000) / 1000 === 0.3;
法二、
EPSILON = ,读:艾普瑟冷,第五个希腊字母
Number.EPSILON=(function(){ return Number.EPSILON ? Number.EPSILON : Math.pow(2,-52) })();
function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON; }
G5、声明式编程、命令式编程、函数式编程
命令式偏详细、具体实现,代码逻辑思路清晰,严谨可控
声明式偏使用封装的方法,需要功能调用对应模块获得结果,多次获取幂等
函数式
AOP
面向对象编程
G6、rxjs--流式处理结合函数式编程
G7、Promise/async-await
G8、js数据类型 boolean、string、number、undefined、null、Object、RegExp、Array、Function、Date、Symbol、BigInt
instanceof、typeof、Array.isArray
G9、常见位运算
逻辑运算符:&、^、|、~
移位运算符:<<、>>