From 1278fed56ad5db45f451fe5b1520df3c73dfa2f8 Mon Sep 17 00:00:00 2001
From: xugaoyi <894072666@qq.com>
Date: Mon, 13 Apr 2020 17:15:06 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dfromt=20matter=E5=B7=A5?=
=?UTF-8?q?=E5=85=B7bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/.vuepress/config/sidebar-auto.js | 2 +-
.../100.比typeof运算符更准确的类型判断.md | 78 +++++++++++++++++++
docs/06.收藏夹/01.网站和工具.md | 10 ++-
theme-vdoing/components/SidebarButton.vue | 2 +-
utils/frontmatter.js | 20 ++++-
5 files changed, 104 insertions(+), 8 deletions(-)
create mode 100644 docs/01.前端/25.JavaScript文章/100.比typeof运算符更准确的类型判断.md
diff --git a/docs/.vuepress/config/sidebar-auto.js b/docs/.vuepress/config/sidebar-auto.js
index d4b7669..da8b5ee 100644
--- a/docs/.vuepress/config/sidebar-auto.js
+++ b/docs/.vuepress/config/sidebar-auto.js
@@ -19,7 +19,7 @@ module.exports = {
"/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"]],
diff --git a/docs/01.前端/25.JavaScript文章/100.比typeof运算符更准确的类型判断.md b/docs/01.前端/25.JavaScript文章/100.比typeof运算符更准确的类型判断.md
new file mode 100644
index 0000000..cc19028
--- /dev/null
+++ b/docs/01.前端/25.JavaScript文章/100.比typeof运算符更准确的类型判断.md
@@ -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
+```
\ No newline at end of file
diff --git a/docs/06.收藏夹/01.网站和工具.md b/docs/06.收藏夹/01.网站和工具.md
index c6aefdf..b528e78 100644
--- a/docs/06.收藏夹/01.网站和工具.md
+++ b/docs/06.收藏夹/01.网站和工具.md
@@ -61,7 +61,7 @@ article: false
### Emoji表情
* [emoji表情](https://emojipedia.org/)
* [emoji表情备忘录](https://www.webfx.com/tools/emoji-cheat-sheet)
-> window系统下按Win+.快速打开表情选择框
+> windows系统下按Win+.快速打开表情选择框
### 图片压缩
* [tinypng图片压缩](https://tinypng.com) 压缩png很有用
@@ -72,6 +72,7 @@ article: false
* [百度脑图](https://naotu.baidu.com) 思维导图
### CSS相关
+* [CSS生成器](https://neumorphism.io/)
* [CSS渐变生成器](https://www.colorzilla.com/gradient-editor/)
* [CSS3-Box Shadow(阴影)](https://www.html.cn/tool/css3Preview/Box-Shadow.html)
* [贝塞尔曲线生成器 ](https://cubic-bezier.com)
@@ -79,8 +80,11 @@ article: false
### CDN加速
* [jsDelivr](http://www.jsdelivr.com/) 国外的一家优秀的公共 CDN 服务提供商
-### 其他
-* [Linux命令手册](https://ipcmen.com/)
+### 正则
* [正则可视化](https://regex101.com/)
+### 其他
+* [Linux命令手册](https://ipcmen.com/)
+
+
diff --git a/theme-vdoing/components/SidebarButton.vue b/theme-vdoing/components/SidebarButton.vue
index a8a11a0..7d52d67 100644
--- a/theme-vdoing/components/SidebarButton.vue
+++ b/theme-vdoing/components/SidebarButton.vue
@@ -38,7 +38,7 @@
color #888
border-radius 50%
padding 0
- transition all .2s ease
+ transition left .2s ease
&:hover
box-shadow 0 2px 6px rgba(0,0,0,.15)
.icon
diff --git a/utils/frontmatter.js b/utils/frontmatter.js
index 59254ed..58f7b79 100644
--- a/utils/frontmatter.js
+++ b/utils/frontmatter.js
@@ -53,7 +53,10 @@ function main() {
}
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); // 写入
console.log(`update FrontMatter:${file.filePath} `)
}
@@ -66,8 +69,7 @@ function main() {
matterData.permalink = file.permalink;
}
// 修复date时区和格式被修改的问题 (并非更新date的值)
- const date = new Date(matterData.date);
- matterData.date = `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`;
+ matterData.date = repairDate(matterData.date);
const newData2 = YAML.stringify(JSON.parse(JSON.stringify(matterData))) + '---\r\n' + fileMatterObj.content;
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) {
return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}`