跨时钟域电路(CDC)杂记
如果在 JavaScript 中使用 Math.random().toString(16)
这种方法来生成随机字符串,字符串的长度并不固定。我测试了一些数据,发现最小可能是 9 位。(或许最小是 8 位)
Math.random() 生成随机字符串需要注意长度
假设有一个页面,上面黄色部分是一个浮窗。我们需要用 JavaScript 实现:点击页面其他部分时关闭这个浮窗。
要点在于区分用户点击的是浮窗还是其他部分。
JavaScript 点击页面空白处,关闭浮窗/弹框/菜单
vue 开发里 mock 数据,一个常用的办法是使用 mockjs
包。我以前也略微用过,然而最近我又想用,却发现怎么折腾都没有生效,只好寻找其他方法。
经过尝试找到了两个可用的方法,下面这个我最喜欢。这个方法使用 vue-cli 的插件 vue-cli-plugin-mock
。
Vue-cli mock 数据
我在 Chrome 扩展里修改了前台页面的请求,把 referer 和 origin 都修改了。但是请求还是因为跨域问题失败了。在失败的错误信息里,看到 origin 是修改之前的原本的 origin。
Fetch 请求的 request origin
console.log(0)
setTimeout(() => {
console.log(1)
}, 0);
console.log(2)
如上代码会输出 0,2,1。 setTimeout 里面的是最后执行的。这是因为 JavaScript 的任务队列分为同步队列和异步队列, 优先执行同步队列里的任务,同步队列里的任务执行完了才会执行异步队列里的任务。setTimeout 里的代码会被放到异步队列里,这样就改变了代码的执行顺序。指定时间 0 是让 JavaScript 执行异步队列时尽早执行这部分代码。
JavaScript 中 setTimeout 0 的使用
设想一下简单的例子:有字符串 abcd
,我们使用正则表达式 /\w/g
全局匹配它,应该获取到 a
b
c
d
四个字符串。
正则表达式的 exec
方法和字符串的 match
都可以达到这个目的,但使用方式上有差别。
下面的内容只探讨全局匹配模式的情况(也就是正则表达式后面加了 g
标识)。非全局匹配模式,可以基本认为它们没有差别。
JS 中 exec 和 match 进行正则表达式匹配的区别
1. 如果把单选、复选按钮隐藏,但又要让它能被 tab 到,则不能使用常规的 display: none;
或者 visibility: hidden;
隐藏,这会导致它不能被 tab 到。应该设置宽高为 0,透明度为 0。
2. 单选按钮可以用空格键选中,但再按空格不能取消选中。
那么当它选中之后,再按空格,会发生什么?表面上看什么都没发生,但实际上浏览器会把这个按钮的 checked 先变成 fasle,然后再变成 true。也就是按空格时,浏览器总会把它从未选中变成选中,走一次流程。
不过这个知识点实在有些冷……也很少能用到。
Read More →
HTML 表单小细节
又把这里当笔记用了233每次从头找很烦 Read More →