JavaScript 的 eval

eval 的使用方式

eval 可以接受一个字符串,并解析执行,例如:

var a = 1;
eval('a + 1') // 2
eval('{ foo: 123 }') // 123,代码块
eval('({ foo: 123 })') // { foo: 123 },对象字面量

严格模式

通常 eval 应当只在严格模式下使用。

READ MORE...

跨源资源共享(CORS)相关 headers

CORS 相关响应头

在进行 CORS 相关的配置时,通常需要一些以 Access-Control 开头的响应头,比如:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age

要理解这些 header 的作用,可以直接动手通过一个简单的实验来辅助理解。

实验代码的后端部分,基于 node + express。下面正式开始。

READ MORE...

WSL

开启 WSL 功能

依次进入: 控制面板 > 程序 > 程序和功能

在左侧栏中,找到“启用或关闭 Windows 功能”,点击打开新窗口

在新窗口(Windows 功能)中,拉到最下面,找到“适用于 Linux 的 Windows 子系统”,并勾选上。

确定,稍等片刻就启用完毕。

然后重启电脑。

接着打开应用商店,搜索 “WSL”。

在搜索结果中,找到喜欢的 Linux 发行版,安装。

比如安装的是 Ubuntu 18.04 lts,那么完成后,就可以找到 Ubuntu 这个应用图标。可以用于打开一个 Bash 和 Ubuntu 交互。

配置好源(如清华的 TUNA 源)后(注意选对系统版本),就可以愉快地安装各类环境了。

至此,第一部分准备工作完成。

READ MORE...

Excel 中 1900 闰年问题

在业余开发在线电子表格应用过程,学习了下 Excel 中对于日期的表示方式,发现了一个有意思的问题,那就是 Excel 会将 1900 年当作是闰年。 本篇博客就这个问题随意延伸聊聊。

Excel 日期表示

Excel 的日期内部存储为自然数,代表从 1900 年 1 月 0 日 开始的计算的某一天。

即:

  • 0 代表 1900-01-00
  • 1 代表 1900-01-01
  • 2 代表 1900-01-02

Excel 日期 BUG

但是由于历史原因(兼容 Lotus),有个永远不会被修复的 Bug 很出名,那就是 1900 年被日期函数认为是 “闰年”。

这导致了,60 这个数字,代表的就是 1900-01-29(虚构的闰日)这个日期。

Mac 版 的 Excel 默认使用 1904 日期系统,所以没有问题。

Excel 日期 JavaScript 日期互转

READ MORE...

JavaScript 函数式编程参数数量问题

在开发函数式工具库的过程,引发了对于参数数量的一些思考,本篇博客只是随意发散写写。

map 的参数数量

看一个经典的例子:

['123', '123'].map(parseInt)
// [123, NaN]

原因在于,map 的回调,会传入三个参数,而 parseInt 函数的签名为 parseInt(string, radix),第二个参数 radix 为一个 2 ~ 36 之间的基数,代表以什么进制去解析第一个参数 string,而一旦无法解析,则会返回 NaN。这个例子中,map 第二个 123 时,传入 parseInt 的参数为 ('123', 1, ['123', '123']),所以返回的结果就出乎意料了。

解决这种问题,有两种思路。

第一种,多一层拦截,限制传入 parseInt 的参数。

READ MORE...