如果在 JavaScript 中使用 Math.random().toString(16)
这种方法来生成随机字符串,字符串的长度并不固定。我测试了一些数据,发现最小可能是 9 位。(或许最小是 8 位)
假设有一个页面,上面黄色部分是一个浮窗。我们需要用 JavaScript 实现:点击页面其他部分时关闭这个浮窗。
要点在于区分用户点击的是浮窗还是其他部分。
JavaScript 点击页面空白处,关闭浮窗/弹框/菜单
设想一下简单的例子:有字符串 abcd
,我们使用正则表达式 /\w/g
全局匹配它,应该获取到 a
b
c
d
四个字符串。
正则表达式的 exec
方法和字符串的 match
都可以达到这个目的,但使用方式上有差别。
下面的内容只探讨全局匹配模式的情况(也就是正则表达式后面加了 g
标识)。非全局匹配模式,可以基本认为它们没有差别。
JS 中 exec 和 match 进行正则表达式匹配的区别
最近我开始学习使用 TypeScript。先看了看教程,好像很简单的样子,就那些类型嘛,定义好类型就完事了。但是实际使用中却遇到了不少问题,在这里记录一些经验。
Read More →
TypeScript 使用记录
我想修改之前的代码,把 js 变量名转换为驼峰命名风格,如下:
// 原有代码的变量名是下划线方式 let test_name = '' test_name = document.querySelector('.test_name') // 修改成驼峰命名 let testName = ''; testName = document.querySelector('.test_name');
因为要修改的文件内容繁杂,变量名很多,手动修改不能接受,此外我还担心手动替换会影响到不该改的地方(如字符串里),所以我想找一个工具来自动转换,这样就方便多了。
Read More →
Babel 将 js 变量名转换为驼峰命名风格
今天我想让 Eslint 使用 Standard 代码风格来检查 JavaScript 代码,又折腾了许久。
其实弄明白了就简单了,安装这些依赖的 npm 包:
npm install -g standard eslint eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node
如果不想全局安装,你也可以把 -g 改为 -D 进行本地安装。
安装完之后,在 .eslintrc 配置文件的 extend 规则里添加 standard,如:
{ "extends": ["standard"] }
重启项目,如果 ESlint 没有报错信息,应该就可以使用 Standard 规则检查代码了。
Read More →
ESlint 使用 Standard 代码风格
在本站页面打开浏览器控制台,可以看到一些提示信息:
2 个提示:避免使用 document.write()
2 个提示:解析器因 document.write() 被阻塞
Read More →
避免使用 document.write()
今天有人报告我的 pixiv 图片下载器在某些情况下,无法保存某个图片。我去检查了下,发现这个作品(pid=73111615)最后的空格暗藏玄机。
复制这个空格,粘贴到别的地方,把光标放到最后,然后按键盘的 ← 箭头,会发现需要按 4 次才能到这个空格的前面。
复制到浏览器控制台,发现确实是 4 个字符。
经过检查,第一个空格是普通的空格,后面 3 个是特殊字符,它并不会显示出来。浏览器控制台里那时应该是做了特殊处理。这玩意放在代码里,ESLint 报错说这是“irregular whitespace”,不规则的空白。
最后我复制它的 Unicode 码 \u200b
,把它替换掉了。
特殊字符防不胜防啊,不知道以后还会不会遇到别的来捣乱。
不规则的空白
今天看到的一个算法,挺有意思。
假设有五个选项,在 100 个人里,有 8 个人选择第一项,22 个人选择第二项,26 个人选择第三项,26 个人选择第四项,18 个人选择第五项。如何用程序模拟?
Read More →
JavaScript 按概率选择项目
去年我做了个 Vue.js 的待办事项,是 PC 上的样式,现在又做了个待办事项,算是手机上的。依旧可以设置背景。
之前 pc 上的那个,闹钟有兼容性问题,而手机上这个,不再播放音乐来提醒了,改为使用浏览器的通知。但这需要 HTTPS 和浏览器的支持,所以上面的在线体验是没有通知的。
其他详见 GitHub 里的说明~