JavaScript里面如何快速生成乘法口诀练习题?

2022-01-02大约6分钟

问题的背景是这样的:我希望每天能够给小孩出一份乘法口诀的练习题,题目的顺序每天都不重复。作为程序员,肯定是不愿意手动去一道道出题的,那么写程序去生成这些题目是必须的。生成题目简单,二重循环就可以,但是把题目随机排序,有没有简单的办法? 在JavaScript里面,对于数组里面的元素,我们可以使用 来对数组的内容进行排序。使用这个方法,我们可以按照数据的值或属性按照某个规则进行升序或降序来排序。但是...

如何在Ubuntu里面升级Git

2022-01-02大约4分钟

当前 Git 最新的版本已经是2.34.1,但是我的Ubuntu 18.04.2 LTS系统里的Git版本是2.17.1,由于更新版本的 Git 更加安全,因此还是有必要升一下。 Ubuntu默认的安装包仓库里的版本只是2.17.1,所以直接通过 来安装,是不会安装到最新的版本的。为了达到目的,我们可以用Git团队为Ubuntu用户开发的一个PPA ( Personal Package Archi...

escape/encodeURI/encodeURIComponent的区别?

2021-12-10大约7分钟

JavaScirpt里有三个用来转义字符串的函数: 、 和 。记住这几个函数的区别不是那么容易,因此这篇文章来总结一下: 能够把大多数英文标点符号替换成对应的十六进制字符,但是面对UNICODE字符的时候,就不是那么够用了,这时候要考虑用 。 是 的一个扩展,区别是前者还会对这些符号进行转义: 。当URL里的参数有特殊字符或者包含中文等非ASCII字符的时候,就需...

在用Jest测试React组件时,如何支持<canvas>元素

2021-09-23大约5分钟

用Jest做JavaScript单元测试是个不错的选择,在Jest的基础上,用 @testing-library/reac t是锦上添花的方法。 React Testing Library提供了 API,可以用这个API在 jsdom 里渲染React的组件。jsdom是一个模拟的浏览器里的JS运行时,实现了很多重要的web标准,比如DOM和HTML。但是在运行涉及到 的元素测试的时候,可能会报一...

如何用HTML5的canvas里面画图?

2021-09-22大约3分钟

在HTML里画一些简单的图的时候,有时候我们并不需要像 HighCharts 这样重量级的画图库。在HTML5的canvas里面画一些简单的图并不难。 从一个最简单的例子看起: 运行代码,可以看到我们很容易在canvas里面画了一个方框:方框的起始位置是(20, 20),宽度和高度分别是150和100。 有了这个基础,我们可以再画一个简单的柱状图(点“ 运行 ”按钮来查看运行结果): 这样,一个简...

HTTP header里的X-Real-IP和X-Forwarded-For的区别

2021-09-21大约5分钟

在HTTP的请求header里,我们经常可以看到类似这样的内容: 如果要取客户端的IP地址,如何取才对? X-Forwarded-For (XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服...

JavaScript里如何根据条件为对象赋值

2021-09-20大约6分钟

在JavaScript里,我们有时候需要根据一些条件给一个变量赋值,比如,当value是有值的时候,要显示这个值,没有值的时候,显示" "。 勤快人的做法: 代码写的好长啊,看起来有点累,有没有简单点的写法?让我们看看懒人的写法吧。 懒人的做法: 在这里,用三目运算符(ternary operator),可以只用一行代码就达到上面多行代码就能达到的效果,太好了! 不过,上面的这个场景,三目运算符的...

JavaScript里如何避免使用可能为null对象的属性

2021-09-20大约8分钟

在JavaScript里,访问一个外面传入的对象的属性前,先判断这个对象是否为 或者 会是个很好的习惯。 勤快人的写法 一看这个代码,就知道写代码的人很严谨,为了获取 ,把整个属性链上的对象都判断了一下是否为空,可以有效地防止程序出错。 有点懒的人的写法 但是,上面的写法有点要人太勤快了点,要敲好多代码来判断,并且一堆的 语句,看着不怎么爽。那怎么省事呢?我有 lodash 啊!这么写: 看起来是...

如何增加Node.js的运行时内存限制

2021-09-20大约8分钟

Node.js的代码在运行的时候,默认情况下最大能用的内存空间大概是1.4GB左右。也就是说,哪怕你的机器有更多的内容,比如说32GB,那么Node.js也只会用到1.4GB。从实际的情况来看,即使用到了1.4GB,那么NodeJS的进程也不一定会崩溃,可能到接2GB的时候才会崩溃,但是从内存占用超过1.4GB之后,进程的响应时间就开始增大了,结果也可能会出错 。 因此,当观察到Node.js的进...

如何在Node.js里获取用户的IP地址

2021-09-20大约5分钟

在Node.js的request对象里,客户端的IP地址可能会存在多个不同的地方,比如,可能在HTTP header的 ,或者其他的一些地方如 , , , 或者 。 自己写代码,这不是一个复杂的事情,但是还是尽量避免自己去重复造轮子。NPM仓库里有一些针对的模块,比如 @supercharge/request-ip 这个库。这个库会检查一些可能出现IP地址的地方,然后返回找到的IP地址。 如果...