三小记(1)

关键词

  1. keypress与keydown有何区别?
  2. 你真的了解concat吗?
  3. exec是干啥的?

keydown、keypress、keyup的区别

  • keydown 任意按键按下,按住不放会连续触发
  • keypress 与keydown基本没差别,任意按键按下,按住不放会连续触发,触发顺序排在keydown后面
  • keyup 任意按键抬起

concat深入理解

concat方法用于连接数组或字符串,连接字符串比较鸡肋,且不说ES6有模版字符串大行其道,ES5的简单的+号连接字符串也让concat在字符串连接方面毫无优势可言。

用于连接数组时,concat方法返回一个新数组,不会改变原数组。接收的参数也很自由,可以是一堆数组元素,也可以是一个或多个数组。

请记住这个准则,concat会扁平化传入的最外层数组,但不会递归扁平化。也就是说,这个扁平的操作层级只有一层,如果扁平化后还存在引用类型,会将该引用类型的指针放入目标数组。

[1,2].concat(3, 4) // 返回[1,2,3,4]

[1,2].concat([3,4]) // 返回[1,2,3,4]

[1,2].concat(3,[4]) // 返回[1,2,3,4]

[1,2].concat([3,[4]]) // 返回[1,2,3,[4]]

[1,2].concat({name: 'zhang'}) // 返回[1,2,{name: 'zhang'}]

[1,2].concat([{name: 'zhang'}]) // 返回[1,2,{name: 'zhang'}]

正则对象的test和exec

正则对象的test用于检测某个字符串是否符合该正则对象的规则,符合返回true,不符合返回false

exec相比test会更复杂一些,它的作用是对某个字符串进行正则规则的搜索匹配,如果能匹配上,返回一个详情数组;如果匹配不上,返回null

但是这里有一点复杂的是,对于正则对象,全局匹配和非全局匹配的行为表现会略有不同:

  • 非全局匹配的正则对象。无状态,它无论执行多少次,匹配的结果都是一样的,都会返回匹配到的第一个结果的详情(比如下标,被检测的字符串等);

  • 全局匹配的正则对象。有状态,它更类似于那种一步步匹配的逻辑:匹配到第一个就停下来,再次执行则匹配下一个,再次执行则继续匹配下一个......,当匹配完最后一个时,就返回开始位置,重新匹配第一个。这种行为很类似生活中的一个场景:比如网易云音乐的循环播放某个歌单

// 非全局匹配的正则对象,重复执行结果不变
const exp = /ok/;

exp.lastIndex // 0

exp.exec('are you ok? I am very ok') // ["ok", index: 8, input: "are you ok? I am very ok", groups: undefined]
exp.lastIndex // 0

exp.exec('are you ok? I am very ok') // ["ok", index: 8, input: "are you ok? I am very ok", groups: undefined]
exp.lastIndex // 0

// 全局匹配的正则对象,每次执行都会动态更新自身状态
const globalExp = /ok/g;

globalExp.lastIndex // 0

globalExp.exec('are you ok? I am very ok'); // ["ok", index: 8, input: "are you ok? I am very ok", groups: undefined]
globalExp.lastIndex // 10

globalExp.exec('are you ok? I am very ok'); // ["ok", index: 22, input: "are you ok? I am very ok", groups: undefined]
globalExp.lastIndex // 24

globalExp.exec('are you ok? I am very ok'); // null
globalExp.lastIndex // 0

写在最后

总结:

  • keydown先于keypress触发,两者表现类似
  • concat对入参会进行一层扁平化
  • exec用于搜索字符匹配详情,非全局正则只匹配第一个,全局正则逐个匹配

我工作已经两年,最近感觉自己现在稍微的有那么一丢丢浮躁,什么都想学,但是确感觉有些无从下手。于是增加这个分类:三小记。每次记录三个小的知识点。水滴石穿💧,慢慢磨吧。

 

posted @ 2020-07-01 18:23  陌上兮月  阅读(473)  评论(1编辑  收藏  举报