修复fromt matter工具bug

This commit is contained in:
xugaoyi 2020-04-13 17:15:06 +08:00
parent 10a439427f
commit 1278fed56a
5 changed files with 104 additions and 8 deletions

View File

@ -19,7 +19,7 @@ module.exports = {
"/05.关于/": [["01.关于.md","关于","/about"]], "/05.关于/": [["01.关于.md","关于","/about"]],
"/06.收藏夹/": [["01.网站和工具.md","网站和工具","/bookmarks"],["02.库.md","库","/pages/90f6badc8a904646"]], "/06.收藏夹/": [["01.网站和工具.md","网站和工具","/bookmarks"],["02.库.md","库","/pages/90f6badc8a904646"],["03.库2.md","库2","/pages/82d92771ca361ac3"]],
"/07.时间轴/": [["01.时间轴.md","时间轴","/timeline"]], "/07.时间轴/": [["01.时间轴.md","时间轴","/timeline"]],

View File

@ -0,0 +1,78 @@
---
title: 比typeof运算符更准确的类型判断
date: 2020-04-13 15:56:54
permalink: /pages/fd4a16d56b83c1bc
---
# 比typeof运算符更准确的类型判断
不同数据类型的`Object.prototype.toString`方法返回值如下。
- 数值:返回`[object Number]`。
- 字符串:返回`[object String]`。
- 布尔值:返回`[object Boolean]`。
- undefined返回`[object Undefined]`。
- null返回`[object Null]`。
- 数组:返回`[object Array]`。
- arguments 对象:返回`[object Arguments]`。
- 函数:返回`[object Function]`。
- Error 对象:返回`[object Error]`。
- Date 对象:返回`[object Date]`。
- RegExp 对象:返回`[object RegExp]`。
- 其他对象:返回`[object Object]`。
这就是说,`Object.prototype.toString`可以看出一个值到底是什么类型。
```js
Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"
```
利用这个特性,可以写出一个比`typeof`运算符更准确的类型判断函数。
```js
var type = function (o){
var s = Object.prototype.toString.call(o)
return s.match(/\[object (.*?)\]/)[1].toLowerCase()
}
type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"
```
在上面这个`type`函数的基础上,还可以加上专门判断某种类型数据的方法。
```js
var type = function (o){
var s = Object.prototype.toString.call(o);
return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
['Null',
'Undefined',
'Object',
'Array',
'String',
'Number',
'Boolean',
'Function',
'RegExp'
].forEach(function (t) {
type['is' + t] = function (o) {
return type(o) === t.toLowerCase();
};
});
type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
```

View File

@ -61,7 +61,7 @@ article: false
### Emoji表情 ### Emoji表情
* [emoji表情](https://emojipedia.org/) * [emoji表情](https://emojipedia.org/)
* [emoji表情备忘录](https://www.webfx.com/tools/emoji-cheat-sheet) * [emoji表情备忘录](https://www.webfx.com/tools/emoji-cheat-sheet)
> window系统下按<kbd>Win</kbd>+<kbd>.</kbd>快速打开表情选择框 > windows系统下按<kbd>Win</kbd>+<kbd>.</kbd>快速打开表情选择框
### 图片压缩 ### 图片压缩
* [tinypng图片压缩](https://tinypng.com) 压缩png很有用 * [tinypng图片压缩](https://tinypng.com) 压缩png很有用
@ -72,6 +72,7 @@ article: false
* [百度脑图](https://naotu.baidu.com) 思维导图 * [百度脑图](https://naotu.baidu.com) 思维导图
### CSS相关 ### CSS相关
* [CSS生成器](https://neumorphism.io/)
* [CSS渐变生成器](https://www.colorzilla.com/gradient-editor/) * [CSS渐变生成器](https://www.colorzilla.com/gradient-editor/)
* [CSS3-Box Shadow(阴影)](https://www.html.cn/tool/css3Preview/Box-Shadow.html) * [CSS3-Box Shadow(阴影)](https://www.html.cn/tool/css3Preview/Box-Shadow.html)
* [贝塞尔曲线生成器 ](https://cubic-bezier.com) * [贝塞尔曲线生成器 ](https://cubic-bezier.com)
@ -79,8 +80,11 @@ article: false
### CDN加速 ### CDN加速
* [jsDelivr](http://www.jsdelivr.com/) 国外的一家优秀的公共 CDN 服务提供商 * [jsDelivr](http://www.jsdelivr.com/) 国外的一家优秀的公共 CDN 服务提供商
### 其他 ### 正则
* [Linux命令手册](https://ipcmen.com/)
* [正则可视化](https://regex101.com/) * [正则可视化](https://regex101.com/)
### 其他
* [Linux命令手册](https://ipcmen.com/)

View File

@ -38,7 +38,7 @@
color #888 color #888
border-radius 50% border-radius 50%
padding 0 padding 0
transition all .2s ease transition left .2s ease
&:hover &:hover
box-shadow 0 2px 6px rgba(0,0,0,.15) box-shadow 0 2px 6px rgba(0,0,0,.15)
.icon .icon

View File

@ -53,7 +53,10 @@ function main() {
} }
if (mark) { if (mark) {
const newData = YAML.stringify(matterData) + '---\r\n' + fileMatterObj.content; if(matterData.date && type(matterData.date) === 'date') {
matterData.date = repairDate(matterData.date) // 修复时间格式
}
const newData = YAML.stringify(matterData).replace(/\n\s{2}/g,"\n") + '---\r\n' + fileMatterObj.content;
fs.writeFileSync(file.filePath, newData); // 写入 fs.writeFileSync(file.filePath, newData); // 写入
console.log(`update FrontMatter${file.filePath} `) console.log(`update FrontMatter${file.filePath} `)
} }
@ -66,8 +69,7 @@ function main() {
matterData.permalink = file.permalink; matterData.permalink = file.permalink;
} }
// 修复date时区和格式被修改的问题 (并非更新date的值) // 修复date时区和格式被修改的问题 (并非更新date的值)
const date = new Date(matterData.date); matterData.date = repairDate(matterData.date);
matterData.date = `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`;
const newData2 = YAML.stringify(JSON.parse(JSON.stringify(matterData))) + '---\r\n' + fileMatterObj.content; const newData2 = YAML.stringify(JSON.parse(JSON.stringify(matterData))) + '---\r\n' + fileMatterObj.content;
fs.writeFileSync(file.filePath, newData2); // 写入 fs.writeFileSync(file.filePath, newData2); // 写入
@ -80,6 +82,18 @@ function main() {
} }
// 类型判断
function type(o){
var s = Object.prototype.toString.call(o)
return s.match(/\[object (.*?)\]/)[1].toLowerCase()
}
// 修复date时区格式的问题
function repairDate(date) {
date = new Date(date);
return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`;
}
// 日期的格式 // 日期的格式
function dateFormat(date) { function dateFormat(date) {
return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}`