-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathh_z09418208.sql
182 lines (169 loc) · 154 KB
/
h_z09418208.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
Navicat Premium Data Transfer
Source Server : PHP_WEB_SERVER
Source Server Type : MySQL
Source Server Version : 50617
Source Host : 10.18.57.16:3306
Source Schema : h_z09418208
Target Server Type : MySQL
Target Server Version : 50617
File Encoding : 65001
Date: 20/06/2021 09:20:33
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文章id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间·',
`edit_time` datetime(0) NULL DEFAULT NULL COMMENT '编辑时间',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '文章内容',
`author` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '作者',
`category` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类',
`meta` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标签',
`main_pic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主图(可缺省)',
`file` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件文件',
`md_content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'md格式的文件内容',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 37 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article` VALUES (1, '2021-05-13 18:19:48', '2021-05-13 18:19:50', '这是一篇测试文章111', '<p>文章内容(test)22</p>\r\n', '夏2', '程序人生', 'java,杂谈', '', 'uploads/files/博客系统_1621431586_573.png', '文章内容(test)22');
INSERT INTO `article` VALUES (4, '2021-05-13 09:33:59', '2021-05-13 09:33:59', '测试添加文章标题', '文章内容', 'MR.j', '程序人生', '杂谈,面试', '', NULL, '文章内容');
INSERT INTO `article` VALUES (5, '2021-05-13 09:34:00', '2021-05-13 09:34:00', '测试添加文章标题', '文章内容', 'MR.j', '程序人生', '杂谈,面试', '', NULL, '文章内容');
INSERT INTO `article` VALUES (6, '2021-05-13 09:34:01', '2021-05-13 09:34:01', '测试添加文章标题', '文章内容', 'MR.j', '程序人生', '杂谈,面试', '', NULL, '文章内容');
INSERT INTO `article` VALUES (8, '2021-05-13 09:34:54', '2021-05-13 09:34:54', '修改后的标题', '修改后的内容', '修改后的作者', '程序人生', '杂谈,面试', '', 'uploads/files/测试上传_1621130192_392.txt', NULL);
INSERT INTO `article` VALUES (16, '2021-05-17 04:17:13', '2021-05-17 04:17:13', '【5分钟搞定】如何将py打包成exe可执行文件', '<h2 id=\"h2-u7B80u4ECB\"><a name=\"简介\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>简介</h2><p>python代码运行肯定是需要python环境还有一些外在依赖包的。</p>\r\n<p><strong>pyinstaller</strong>将Python脚本打包成可执行程序,使在没有Python环境的机器上运行。</p>\r\n<h2 id=\"h2-u5B', '蒋伟伟', '程序人生', 'python,可执行文件', '', '', NULL);
INSERT INTO `article` VALUES (20, '2021-05-17 07:13:58', '2021-05-17 07:13:58', '【5分钟搞定】如何将py打包成exe可执行文件', '<h2 id=\"h2-u7B80u4ECB\"><a name=\"简介\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>简介</h2><p>python代码运行肯定是需要python环境还有一些外在依赖包的。</p>\r\n<p><strong>pyinstaller</strong>将Python脚本打包成可执行程序,使在没有Python环境的机器上运行。</p>\r\n<h2 id=\"h2-u5B89u88C5\"><a name=\"安装\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>安装</h2><pre><code># 建议先配置pip国内下载源,再进行安装\r\npip install pyinstaller\r\n</code></pre><h2 id=\"h2-u6253u5305u8FD0u884C\"><a name=\"打包运行\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>打包运行</h2><p>例子:打包下面的card_main.py文件。</p>\r\n<p>它是一个控制台窗口的程序。其中调用cards_tools中的方法。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326174120610.png\" alt=\"image-20210326174120610\"></p>\r\n<pre><code>pyinstaller 你要编译的主程序.py\r\n</code></pre><p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326174326906.png\" alt=\"image-20210326174326906\"></p>\r\n<p><strong>运行成功实例:</strong></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326174351520.png\" alt=\"image-20210326174351520\"></p>\r\n<p><strong>目录之中多了3个新的文件。</strong></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326174419758.png\" alt=\"image-20210326174419758\"></p>\r\n<p>熟悉github的同学肯定知道,</p>\r\n<p><strong>dist目录中一般存放的就是编译的可执行文件。</strong></p>\r\n<p>直接双击运行就可以了。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326174757298.png\" alt=\"image-20210326174757298\"></p>\r\n<p>您只需要将cards_main文件,打包成压缩包,发给你的朋友。</p>\r\n<p>您的朋友直接双击就可以运行代码了。</p>\r\n<p><strong>当然你也可以,添加-F参数。</strong></p>\r\n<pre><code>pyinstaller -F cards_main.py\r\n</code></pre><p>含义是,直接打包成一个文件。<a href=\"https://pyinstaller.readthedocs.io/en/stable/usage.html\">官网地址</a></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326175221897.png\" alt=\"image-20210326175221897\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326175358981.png\" alt=\"image-20210326175358981\"></p>\r\n<p>您按照自己的需要进行选取就可以了。</p>\r\n<h2 id=\"h2-u5E38u89C1u9519u8BEFu5904u7406\"><a name=\"常见错误处理\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>常见错误处理</h2><p><strong>有的时候,我们打包出来的文件会直接闪退。</strong></p>\r\n<p>显然是因为我们的程序里面有一些问题。</p>\r\n<p>常见问题有,涉及到了读取文件的操作,但文件读取失败。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326175603502.png\" alt=\"image-20210326175603502\"></p>\r\n<p>我们需要把文件复制粘贴到dist目录下。这样才能成功读取文件。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326175750806.png\" alt=\"image-20210326175750806\"></p>\r\n<p>附:小技巧</p>\r\n<p>当我们在控制台,执行.exe文件,报错信息会传递到控制台中,这样可以帮助我们进行Debug。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210326180219367.png\" alt=\"image-20210326180219367\"></p>\r\n<h2 id=\"h2-u53C2u8003\"><a name=\"参考\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>参考</h2><ol>\r\n<li><p><a href=\"https://pyinstaller.readthedocs.io/en/stable/usage.html\">pyinstaller 官方文档</a></p>\r\n</li><li><p><a href=\"https://blog.csdn.net/xc_zhou/article/details/80952022\">周小董的教程</a></p>\r\n</li></ol>\r\n<h2 id=\"h2-u5C3Eu8BED\"><a name=\"尾语\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>尾语</h2><p>以后可能还会继续更新,但现在暂时就到这里吧。</p>\r\n<blockquote>\r\n<p>Author: 夏2同学</p>\r\n<p>Time: 2021年3月26日17:35:44</p>\r\n</blockquote>\r\n', '夏2同学', '程序人生', 'python', '', '', NULL);
INSERT INTO `article` VALUES (21, '2021-05-17 09:48:41', '2021-05-17 09:48:41', 'Python代码如何写的更优雅', '<h1 id=\"h1-python-\"><a name=\"Python代码如何写的更优雅\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Python代码如何写的更优雅</h1><p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/python1.jpeg\" alt=\"python1\"></p>\r\n<p><strong>首先最重要的一点,</strong><br><strong>忘掉其他语言里的写法,</strong><br><strong>尝试使用Python风格进行code,</strong><br><strong>熟练之后,你会觉得她真的很美!</strong></p>\r\n<h2 id=\"h2-1-\"><a name=\"1. 多个值进行初始化\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>1. 多个值进行初始化</h2><pre><code class=\"lang-python\"># > yes\r\ns1,s2,s3 = [],[],0 \r\n# > no (这样写,既麻烦,看起来也累)\r\ns1 = []\r\ns2 = []\r\ns3 = []\r\n</code></pre>\r\n<h2 id=\"h2-2-\"><a name=\"2. 三目运算符\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>2. 三目运算符</h2><pre><code class=\"lang-python\"># Python中没有 ? : 表达式,使用if else替代\r\ndef func():\r\n return return_value if True else other_value\r\n\r\ndef fib(n):\r\n return n if n<2 else fib(n-1)+fib(n-2)\r\n</code></pre>\r\n<h2 id=\"h2-3-\"><a name=\"3. 列表生成式\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>3. 列表生成式</h2><pre><code class=\"lang-python\"># > yes\r\n\r\n[i for i in range(1,100)]\r\n # > 进一步过滤\r\n # is_prime() ---> Bool , 如果返回值为True就加入列表\r\n [i for i in range(2, n+1) if isPrime(i)]\r\n# > no\r\n\r\nres = []\r\nfor i in range(1,100):\r\n res.append(i)\r\n</code></pre>\r\n<h2 id=\"h2-4-list-str-\"><a name=\"4. list、str元素倒置\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>4. list、str元素倒置</h2><pre><code class=\"lang-python\"># 有的同学,肯定想自己封装一个,其实不用, 直接使用切片就可以了。\r\n>>> s = '123'\r\n>>> s[-1::-1]\r\n'321'\r\n\r\n>>> a = [1,2,3]\r\n>>> a[-1::-1]\r\n[3, 2, 1]\r\n\r\n# ! 而且上面的这个式子,非常好记,两边写个-1,中间什么也不写。\r\n# ! 又简单又方便,wonderful!beautiful!\r\n</code></pre>\r\n<h2 id=\"h2-5-\"><a name=\"5. 排序功能\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>5. 排序功能</h2><pre><code class=\"lang-python\"># !非业务必须,不要自己写排序算法,写的慢,还容易错\r\n>>> a = [10,12,11]\r\n>>> sorted(a)\r\n[10, 11, 12]\r\n\r\n# > 我知道,我的读者看到这儿就不乐意了,心想你糊弄我们吧,就这,我们怎么实现需求。\r\n# 别急,我们先来做一道题\r\n</code></pre>\r\n<blockquote>\r\n<p>题目:某班同学考试,进行分数排名,科目 语文+数学,按照总分降序排名。<br>若总分相同,则按语文成绩降序排名。若语文成绩还相同,则按学号升序排名。</p>\r\n<blockquote>\r\n<p><strong>测试数据</strong><br>N = 4<br>学号 语文数学<br>10000001 64 90<br>10000002 90 60<br>10000011 85 80<br>10000003 85 80</p>\r\n</blockquote>\r\n</blockquote>\r\n<pre><code class=\"lang-python\"># 虽然我这边看似写了很长,但是实际,核心,排序处理的代码就一行。\r\n# sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)\r\n# 如果自己写,处理 {总分降序、语文成绩降序、学号升序} 嵌套的if估计头疼死个人。\r\n\r\nn = int(input())\r\n\r\nstus = []\r\nfor i in range(n):\r\n l = list(map(int, input().split(" ")))\r\n stus.append(l)\r\n\r\nres = sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)\r\n\r\nprint(res)\r\n\r\n'''\r\n 结果: \r\n [[10000003, 85, 80], \r\n [10000011, 85, 80], \r\n [10000001, 64, 90], \r\n [10000002, 90, 60]]\r\n'''\r\n\r\n# 肯定会有读者问,上面这么写,时间复杂度如何?\r\n# sorted, 用的是timSort,平均时间复杂度 O(nlogn),可以说已经胜过了绝大多数排序算法了。\r\n</code></pre>\r\n<h2 id=\"h2-6-\"><a name=\"6. 格式化输出\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>6. 格式化输出</h2><pre><code class=\"lang-python\"># python中的格式化输出方式可真是太多了。\r\n# 我所知道的至少有5种。但其实真正常用且好用的就下面两种。\r\n\r\n# 1. f-string 格式化输出\r\n>>> h = "hello";w = "world"\r\n>>> print(f"{h} {w}")\r\nhello world\r\n\r\n# 2. format输出\r\n>>> h = "hello";w = "world"\r\n>>> print("{} {}".format(h,w))\r\nhello world\r\n\r\n# 也可以写的花哨些\r\n>>> h = "hello";w = "world"\r\n>>> x = [h,w]\r\n>>> print("{} {}".format(*x))\r\nhello world\r\n</code></pre>\r\n<h2 id=\"h2-7-\"><a name=\"7. 尾语\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>7. 尾语</h2><p>我知道的,关于Python代码如何写的更优雅,各位一定也有自己的小妙招。</p>\r\n<p>欢迎您在评论区留言,我也好乘机学一手。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/害羞.jpg\" alt=\"\"></p>\r\n', '蒋伟伟', '程序人生', 'python', '', '', '# Python代码如何写的更优雅\r\n\r\n\r\n\r\n![python1](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/python1.jpeg)\r\n\r\n\r\n\r\n\r\n\r\n**首先最重要的一点,**\r\n**忘掉其他语言里的写法,**\r\n**尝试使用Python风格进行code,**\r\n**熟练之后,你会觉得她真的很美!**\r\n\r\n## 1. 多个值进行初始化\r\n\r\n```python\r\n# > yes\r\ns1,s2,s3 = [],[],0 \r\n# > no (这样写,既麻烦,看起来也累)\r\ns1 = []\r\ns2 = []\r\ns3 = []\r\n```\r\n\r\n\r\n\r\n## 2. 三目运算符 \r\n\r\n\r\n\r\n```python\r\n# Python中没有 ? : 表达式,使用if else替代\r\ndef func():\r\n return return_value if True else other_value\r\n\r\ndef fib(n):\r\n return n if n<2 else fib(n-1)+fib(n-2)\r\n```\r\n\r\n\r\n\r\n## 3. 列表生成式\r\n\r\n```python\r\n# > yes\r\n\r\n[i for i in range(1,100)]\r\n # > 进一步过滤\r\n # is_prime() ---> Bool , 如果返回值为True就加入列表\r\n [i for i in range(2, n+1) if isPrime(i)]\r\n# > no\r\n\r\nres = []\r\nfor i in range(1,100):\r\n res.append(i)\r\n```\r\n\r\n## 4. list、str元素倒置\r\n\r\n```python\r\n# 有的同学,肯定想自己封装一个,其实不用, 直接使用切片就可以了。\r\n>>> s = \'123\'\r\n>>> s[-1::-1]\r\n\'321\'\r\n\r\n>>> a = [1,2,3]\r\n>>> a[-1::-1]\r\n[3, 2, 1]\r\n\r\n# ! 而且上面的这个式子,非常好记,两边写个-1,中间什么也不写。\r\n# ! 又简单又方便,wonderful!beautiful!\r\n```\r\n\r\n## 5. 排序功能\r\n\r\n\r\n\r\n```python\r\n# !非业务必须,不要自己写排序算法,写的慢,还容易错\r\n>>> a = [10,12,11]\r\n>>> sorted(a)\r\n[10, 11, 12]\r\n\r\n# > 我知道,我的读者看到这儿就不乐意了,心想你糊弄我们吧,就这,我们怎么实现需求。\r\n# 别急,我们先来做一道题\r\n```\r\n\r\n> 题目:某班同学考试,进行分数排名,科目 语文+数学,按照总分降序排名。\r\n> 若总分相同,则按语文成绩降序排名。若语文成绩还相同,则按学号升序排名。\r\n>\r\n> > **测试数据** \r\n> > N = 4\r\n> > 学号 语文数学\r\n> > 10000001 64 90\r\n> > 10000002 90 60\r\n> > 10000011 85 80\r\n> > 10000003 85 80\r\n\r\n\r\n\r\n```python\r\n# 虽然我这边看似写了很长,但是实际,核心,排序处理的代码就一行。\r\n# sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)\r\n# 如果自己写,处理 {总分降序、语文成绩降序、学号升序} 嵌套的if估计头疼死个人。\r\n\r\nn = int(input())\r\n\r\nstus = []\r\nfor i in range(n):\r\n l = list(map(int, input().split(\" \")))\r\n stus.append(l)\r\n\r\nres = sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)\r\n\r\nprint(res)\r\n\r\n\'\'\'\r\n 结果: \r\n [[10000003, 85, 80], \r\n [10000011, 85, 80], \r\n [10000001, 64, 90], \r\n [10000002, 90, 60]]\r\n\'\'\'\r\n\r\n# 肯定会有读者问,上面这么写,时间复杂度如何?\r\n# sorted, 用的是timSort,平均时间复杂度 O(nlogn),可以说已经胜过了绝大多数排序算法了。\r\n```\r\n\r\n\r\n\r\n## 6. 格式化输出\r\n\r\n```python\r\n# python中的格式化输出方式可真是太多了。\r\n# 我所知道的至少有5种。但其实真正常用且好用的就下面两种。\r\n\r\n# 1. f-string 格式化输出\r\n>>> h = \"hello\";w = \"world\"\r\n>>> print(f\"{h} {w}\")\r\nhello world\r\n\r\n# 2. format输出\r\n>>> h = \"hello\";w = \"world\"\r\n>>> print(\"{} {}\".format(h,w))\r\nhello world\r\n\r\n# 也可以写的花哨些\r\n>>> h = \"hello\";w = \"world\"\r\n>>> x = [h,w]\r\n>>> print(\"{} {}\".format(*x))\r\nhello world\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## 7. 尾语\r\n\r\n我知道的,关于Python代码如何写的更优雅,各位一定也有自己的小妙招。\r\n\r\n欢迎您在评论区留言,我也好乘机学一手。\r\n\r\n![](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/害羞.jpg)');
INSERT INTO `article` VALUES (26, '2021-05-19 06:39:06', '2021-05-19 06:39:06', '【2020蓝桥杯】Python组真题解析 - 第十一届蓝桥杯', '<pre><code>本资料整理者&代码编写者:夏2同学\r\n个人邮箱:[email protected]\r\n请勿未经同意转载 & 如有错误,欢迎指正\r\n资料下载:https://download.csdn.net/download/xia_yanbing/16742326\r\n</code></pre><p>备注:目前蓝桥杯Python编辑器是:IDLE。<br>如果您想了解如何使用,可以参考这篇。<br><a href=\"https://blog.csdn.net/xia_yanbing/article/details/114641646\">https://blog.csdn.net/xia_yanbing/article/details/114641646</a></p>\r\n<p>@<a href=\"目录\">TOC</a></p>\r\n<h2 id=\"h2-a-py\"><a name=\"A-门牌制作.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>A-门牌制作.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/592/learning/\">https://www.lanqiao.cn/problems/592/learning/</a></p>\r\n<h3 id=\"h3--624\"><a name=\"参考答案:624\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>参考答案:624</h3><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/592/learning/\r\n# 参考答案:624\r\n\r\n\r\ntotal = 0\r\nfor i in range(1,2021):\r\n total += (str(i).count("2"))\r\n\r\nprint(total)\r\n\r\n# 624\r\n</code></pre>\r\n<h2 id=\"h2-b-2020-py\"><a name=\"B-寻找2020.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>B-寻找2020.py</h2><p>题目地址:<a href=\"无在线练习题地址\">无在线练习题地址</a></p>\r\n<h3 id=\"h3--16520\"><a name=\"参考答案:16520\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>参考答案:16520</h3><pre><code class=\"lang-python\"># 无在线练习题地址\r\n# 参考答案:16520\r\n\r\ndef search_row(l):\r\n res = 0\r\n m = len(l[0])\r\n n = len(l)\r\n for i in range(n):\r\n for j in range(m-3):\r\n if l[i][j] == "2" and l[i][j+1] == "0" \\\r\n and l[i][j+2] == "2" and l[i][j+3] == "0":\r\n res += 1\r\n return res\r\n\r\n\r\ndef search_xie(l):\r\n res = 0\r\n m = len(l[0])\r\n n = len(l)\r\n for i in range(n-3):\r\n for j in range(m-3):\r\n if l[i][j] == "2" and l[i+1][j+1] == "0" \\\r\n and l[i+2][j+2] == "2" and l[i+3][j+3] == "0":\r\n res += 1\r\n return res\r\n\r\n\r\ndef search_col(l):\r\n res = 0\r\n m = len(l[0])\r\n n = len(l)\r\n for j in range(m):\r\n for i in range(n-3):\r\n if l[i][j] == "2" and l[i+1][j] == "0" \\\r\n and l[i+2][j] == "2" and l[i+3][j] == "0":\r\n res += 1 \r\n return res\r\n\r\n\r\n\r\nwith open("2020.txt",'r') as fp:\r\n lines = fp.readlines()\r\n i = 0\r\n for line in lines:\r\n lines[i] = line.strip('\\n')\r\n i+=1\r\n\r\n # 16520\r\n print(search_row(lines)+search_xie(lines)+search_col(lines))\r\n</code></pre>\r\n<h2 id=\"h2-c-py\"><a name=\"C-跑步锻炼.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>C-跑步锻炼.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/597/learning/\">https://www.lanqiao.cn/problems/597/learning/</a></p>\r\n<h3 id=\"h3--8879\"><a name=\"参考答案:8879\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>参考答案:8879</h3><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/597/learning/\r\n# 参考答案:8879\r\n\r\nflag = 6\r\n\r\ndef nextDay(date):\r\n '''\r\n date: 格式 yyyy-mm-dd\r\n return next_date,is_monday,is_month_begin\r\n 星期一和月初\r\n '''\r\n date = list(map(int,date.split("-")))\r\n y,m,d = date\r\n\r\n d+=1\r\n\r\n if m == 12 and d == 32:\r\n y += 1\r\n m = 1\r\n d = 1\r\n elif m == 2:\r\n if is_leap_year(y):\r\n if d == 30:\r\n m = 3\r\n d = 1\r\n else:\r\n if d == 29:\r\n m = 3\r\n d = 1\r\n elif is_big_month(m):\r\n if d == 32:\r\n m += 1\r\n d = 1\r\n elif not is_big_month(m):\r\n if d == 31:\r\n m += 1\r\n d = 1\r\n\r\n global flag\r\n add_week()\r\n\r\n is_month_begin = True if d == 1 else False\r\n is_monday = True if flag == 1 else False\r\n\r\n new_date = "%d-%02d-%02d" % (y,m,d)\r\n return new_date,is_monday,is_month_begin\r\n\r\n\r\n\r\ndef is_leap_year(year):\r\n if year % 4 == 0 and year % 100 != 0:\r\n return True\r\n elif year % 400 == 0:\r\n return True\r\n return False\r\n\r\ndef is_big_month(month):\r\n if month in [1,3,5,7,8,10,12]:\r\n return True\r\n else:\r\n return False\r\n\r\ndef add_week():\r\n global flag\r\n flag = (flag + 1) % 8 if (flag + 1) % 8 else 1\r\n\r\n\r\ndef main():\r\n start_time = "2000-01-01"\r\n # end_time = "2000-01-10"\r\n end_time = "2020-10-01"\r\n total = 2\r\n while start_time != end_time:\r\n start_time,is_monday,is_month_begin = nextDay(start_time)\r\n if is_monday or is_month_begin:\r\n total += 2\r\n else:\r\n total += 1\r\n print(start_time,is_monday,is_month_begin,total)\r\n print(total)\r\n # ans = \r\n\r\nmain()\r\n</code></pre>\r\n<h2 id=\"h2-d-py\"><a name=\"D-蛇形填数.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>D-蛇形填数.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/594/learning/\">https://www.lanqiao.cn/problems/594/learning/</a></p>\r\n<h3 id=\"h3--761\"><a name=\"参考答案:761\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>参考答案:761</h3><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/594/learning/\r\n# 参考答案:761\r\n\r\ndef print_out(lst):\r\n # 一行行输出\r\n for line in lst:\r\n for x in line:\r\n print("%04d" % x,end=" ")\r\n # print(" ".join(map(str, i)))\r\n print()\r\n\r\n\r\nlst = [i for i in range(1000)]\r\n\r\nnum = 1\r\n\r\nres = [[0 for i in range(101)] for i in range(101)]\r\n\r\ni, j = 0, 0\r\n\r\n# \r\nres[0][0] = num\r\nwhile i != 100 and j != 100:\r\n num += 1\r\n # 向右\r\n j += 1\r\n res[i][j] = num\r\n while j > 0:\r\n # 向斜左下角\r\n num += 1\r\n i += 1\r\n j -= 1\r\n res[i][j] = num\r\n num += 1\r\n # 向下\r\n i += 1\r\n res[i][j] = num\r\n while i > 0:\r\n # 向斜右上角\r\n num += 1\r\n i -= 1\r\n j += 1\r\n res[i][j] = num\r\n\r\n# 蛇形填数字\r\nwith open ('./out.txt','w+') as fp:\r\n for line in res:\r\n for x in line:\r\n fp.write("%04d " % x)\r\n fp.write("\\n")\r\n</code></pre>\r\n<pre><code>## E-排序.py\r\n题目地址:[https://www.lanqiao.cn/problems/598/learning/](https://www.lanqiao.cn/problems/598/learning/)\r\n\r\n### 参考答案:jonmlkihgfedcba\r\n\r\n```python\r\n# https://www.lanqiao.cn/problems/598/learning/\r\n# 参考答案:jonmlkihgfedcba\r\n\r\nimport random\r\n\r\ncount = 0\r\n\r\n# def bubble_sort(lst):\r\n# n = len(lst)\r\n# for i in range(n-1):\r\n# # is_ordered = True\r\n# j = 0\r\n# while j < n-i-1:\r\n# if lst[j] > lst[j+1]:\r\n# # 交换\r\n# lst[j], lst[j+1] = lst[j+1], lst[j]\r\n# global count\r\n# count += 1\r\n# # is_ordered = False\r\n# j += 1\r\n\r\ndef bubble_sort(lst):\r\n n = len(lst)\r\n for i in range(n-1):\r\n is_ordered = True\r\n j = 0\r\n while j < n-i-1:\r\n if lst[j] > lst[j+1]:\r\n # 交换\r\n lst[j], lst[j+1] = lst[j+1], lst[j]\r\n global count\r\n count += 1\r\n is_ordered = False\r\n j += 1\r\n if is_ordered:\r\n # 结束冒泡\r\n break\r\n\r\n\r\n# string =[chr(i) for i in range(ord('a'),ord('p'))]\r\n\r\n# data = ['o', 'n', 'm', 'l', 'k', 'j',\r\n# 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']\r\n\r\n# 1. 最短 2. 字典序低\r\n\r\ndata = ['j', 'o', 'n', 'm', 'l', 'k',\r\n 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']\r\n\r\n# data = string[::-1]\r\n\r\nprint(data)\r\nbubble_sort(data)\r\nprint(data)\r\nprint(count)\r\n</code></pre><h2 id=\"h2-f-py\"><a name=\"F-成绩统计.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>F-成绩统计.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/502/learning\">https://www.lanqiao.cn/problems/502/learning</a></p>\r\n<h2 id=\"h2-\"><a name=\"\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span> </h2><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/502/learning\r\n\r\nfrom decimal import *\r\n\r\nn = int(input())\r\n\r\nsocres = [int(input()) for i in range(n)]\r\n\r\nyouxiu = 0\r\njige = 0\r\n\r\nfor i in socres:\r\n if i >= 85:\r\n youxiu += 1\r\n if i >= 60:\r\n jige += 1\r\n\r\n# 高精度\r\npercent1 = int(round(float(Decimal(jige) / Decimal(n)) * 100, 0))\r\npercent2 = int(round(float(Decimal(youxiu) / Decimal(n)) * 100, 0))\r\n\r\nprint("%d%%" % percent1)\r\nprint("%d%%" % percent2)\r\n</code></pre>\r\n<h2 id=\"h2-g-py\"><a name=\"G-单词分析.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>G-单词分析.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/504/learning\">https://www.lanqiao.cn/problems/504/learning</a></p>\r\n<h2 id=\"h2-\"><a name=\"\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span> </h2><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/504/learning\r\n\r\n# 记录26个英文字母的顺序\r\ncharLst = [0] * 26\r\n\r\nstring = input()\r\n\r\nfor char in string:\r\n charLst[ord(char)-97] += 1\r\n\r\nmax_value = max(charLst)\r\nres_index = charLst.index(max_value)\r\nres_chr = chr(res_index + 97)\r\n\r\nprint(res_chr)\r\nprint(max_value)\r\n</code></pre>\r\n<h2 id=\"h2-h-py\"><a name=\"H-数字三角形.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>H-数字三角形.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/505/learning/\">https://www.lanqiao.cn/problems/505/learning/</a></p>\r\n<h2 id=\"h2-\"><a name=\"\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span> </h2><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/505/learning/\r\n\r\n# 借鉴了 https://www.jianshu.com/p/c20b6b9a178a (C++)\r\n\r\n\r\nif __name__ == '__main__':\r\n # MAX = 105\r\n n = int(input())\r\n MAX = n+2\r\n nums = [[0 for i in range(1, MAX)] for i in range(1, MAX)]\r\n dp = [[0 for i in range(1, MAX)] for i in range(1, MAX)]\r\n\r\n # 读取用户输入\r\n for i in range(1, n+1):\r\n line = map(int, input().split(" "))\r\n for j, e in enumerate(line):\r\n nums[i][j+1] = e\r\n\r\n # print(nums)\r\n\r\n # 初始化最后一行\r\n if n % 2 == 0:\r\n dp[n][n//2] = nums[n][n//2]\r\n dp[n][n//2 + 1] = nums[n][n//2 + 1]\r\n else:\r\n dp[n][n//2 + 1] = nums[n][n//2 + 1]\r\n\r\n # 从后往前依次遍历\r\n for i in range(n-1, 0, -1):\r\n for j in range(1, i+1):\r\n # 如果下一行左边或者右边不为0\r\n if dp[i+1][j] != 0 or dp[i+1][j+1] != 0:\r\n dp[i][j] = nums[i][j] + max(dp[i+1][j], dp[i+1][j+1])\r\n\r\n print(dp[1][1])\r\n</code></pre>\r\n<h2 id=\"h2-i-py\"><a name=\"I-平面分割.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>I-平面分割.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/503/learning/\">https://www.lanqiao.cn/problems/503/learning/</a></p>\r\n<h2 id=\"h2-\"><a name=\"\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span> </h2><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/503/learning/\r\n\r\n# 思路:画几张图观察一下可以发现一下特点:\r\n# 1、重边不会影响区域数目。\r\n# 2、每新加入一条边只要不是重边区域数目必定+1。\r\n# 3、加入的新边如果与之前加入的边每有一个交点则区域数目+1。\r\n\r\nn = int(input())\r\n\r\n# 存放直线数(必须得不重合)\r\nset_line = set()\r\n# 存放交点数\r\nset_point = set()\r\n\r\nfor i in range(n):\r\n tmp = tuple(input().split())\r\n set_line.add(tmp)\r\n set_point.add(tmp[0])\r\n\r\n\r\nprint(len(set_line)+len(set_point))\r\n</code></pre>\r\n<h2 id=\"h2-j-py\"><a name=\"J-装饰珠.py\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>J-装饰珠.py</h2><p>题目地址:<a href=\"https://www.lanqiao.cn/problems/507/learning/\">https://www.lanqiao.cn/problems/507/learning/</a></p>\r\n<h2 id=\"h2-\"><a name=\"\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span> </h2><pre><code class=\"lang-python\"># https://www.lanqiao.cn/problems/507/learning/\r\n\r\nimport os\r\nimport sys\r\n\r\ns = []\r\nr = []\r\nm = []\r\n\r\nfor i in range(6):\r\n s.append(list(map(int, input().split())))\r\nn = int(input())\r\nfor i in range(n):\r\n r.append(list(map(int, input().split())))\r\nfor i in range(6):\r\n p = s[i]\r\n for j in range(n):\r\n if i == 0:\r\n m.append(p[1:].count(int(j+1)))\r\n else:\r\n m[j] += p[1:].count(int(j+1))\r\n\r\n'''print(m)''' '''用m[j]记录6件装备共有 j+1级孔m[j]个'''\r\nmm = m\r\n'''假设j级孔全用j级珠子'''\r\nup = []\r\ndown = []\r\n'''up记录加一颗珠子提升的价值,down记录少一颗珠子减少的价值'''\r\n\r\n\r\ndef up1(k):\r\n if mm[k] >= r[k][1]:\r\n return 0\r\n elif mm[k] == 0:\r\n return r[k][2]\r\n else:\r\n return r[k][2+mm[k]]-r[k][1+mm[k]]\r\n\r\n\r\ndef down1(k):\r\n if mm[k] == 1:\r\n return r[k][2]\r\n elif mm[k] > r[k][1]:\r\n return 0\r\n else:\r\n return r[k][1+mm[k]]-r[k][mm[k]]\r\n\r\n\r\nfor i in range(n):\r\n up.append(up1(i))\r\n down.append(down1(i))\r\n\r\n'''print(up,down)'''\r\n'''第n+1级孔,如果1到n级孔中珠子加1的价值比它减少1颗的价值大,则数值各加1、减1,up、down更新'''\r\n\r\n\r\ndef main1(n):\r\n if n == 0:\r\n return\r\n while max(up[:n]) > down[n] and mm[n] > 0:\r\n t = up.index(max(up[:n]))\r\n mm[t] += 1\r\n up[t] = up1(t)\r\n mm[n] -= 1\r\n down[n] = down1(n)\r\n main1(n-1)\r\n return\r\n\r\n\r\npoint = 0\r\nmain1(n-1)\r\n'''输入有n级,为了和形参统一,此处减1'''\r\n'''print(up,down)\r\nprint(mm)'''\r\nfor i in range(n):\r\n if mm[i] != 0:\r\n point += r[i][1+mm[i]]\r\nprint(point)\r\n'''得到总价值'''\r\n</code></pre>\r\n', '蒋伟伟', 'Python程序设计', 'python,蓝桥杯', '', 'uploads/files/【2020蓝桥杯】python刷题-蓝桥杯_1621420742_415.zip', '');
INSERT INTO `article` VALUES (29, '2021-05-19 09:17:36', '2021-05-19 09:17:36', '别再翻了,大学私藏实用工具_网站全在这里了!', '<h2 id=\"h2-1-fortor-\"><a name=\"1. fortor懒设计\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>1. fortor懒设计</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303155613473.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>你还在忍受PS漫长的加载?用懒设计吧,直接网页打开,不用下载安装,随时随地开始修图,任何简单的修图工作都能胜任。<br><img src=\"https://img-blog.csdnimg.cn/20200303160400253.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p>\r\n<pre><code>fortor懒设计 网址:https://www.fotor.com.cn/photo-editor-beta/editor/basic\r\n</code></pre><h2 id=\"h2-2-removebg-\"><a name=\"2. removebg 在线抠图\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>2. removebg 在线抠图</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303161927488.gif\" alt=\"在这里插入图片描述\"><br>一键抠图,三秒完成PS几分钟的工作量。</p>\r\n<pre><code>remove.bg 网址https://www.remove.bg/zh/upload\r\n</code></pre><h3 id=\"h3-3-panzoid-\"><a name=\"3. panzoid视屏片头制作\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>3. panzoid视屏片头制作</h3><p>自媒体盛行的新时代,你还在为制作视频片头而苦恼,来跟我一起用panzoid,两分钟搞定一切。<br><img src=\"https://img-blog.csdnimg.cn/2020030317163852.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p>\r\n<p>在3Dtext里面可以自定义文本,建议搭配小飞机使用,网速快点。</p>\r\n<pre><code>panzoid网址: https://panzoid.com/\r\n</code></pre><h2 id=\"h2-4-airdroid\"><a name=\"4. 智慧投屏 airdroid\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>4. 智慧投屏 airdroid</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303162459713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>屏幕镜像,远程控制手机,监控周围,一个网址直接搞定!</p>\r\n<pre><code>airdroid智慧投屏 网址http://web.airdroid.com/\r\n</code></pre><h2 id=\"h2-5-win10-\"><a name=\"5. win10美化\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>5. win10美化</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303160945522.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>哪一个cool boy不想要一个<del>装逼</del> 帅气的桌面呢!win10美化官网,直接满足你对于桌面的终极幻想。<br><img src=\"https://img-blog.csdnimg.cn/20200303162626923.jpg\" alt=\"在这里插入图片描述\"><br>害羞⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄</p>\r\n<pre><code>win10美化网址:https://zhutix.com/tag/win10-zhuti/\r\n</code></pre><h2 id=\"h2-6-\"><a name=\"6. 今日热榜\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>6. 今日热榜</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303161427334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>实时获取<del>gayhub</del> GitHub最热门信息,让你不错过程序人生中的任何一次精彩。同时这个网站也支持其他资讯类网站诸如知乎、掘金等。</p>\r\n<pre><code>今日热榜 网址:https://tophub.today/\r\n</code></pre><h2 id=\"h2-7-\"><a name=\"7. 掘金社区\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>7. 掘金社区</h2><p><img src=\"https://img-blog.csdnimg.cn/20200303162716951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>一个有着众多优秀开发者的平台。<br><img src=\"https://img-blog.csdnimg.cn/20200303163006801.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p>\r\n<pre><code>掘金社区 https://juejin.im/timeline\r\n</code></pre><h2 id=\"h2-8-\"><a name=\"8. 语雀平台\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>8. 语雀平台</h2><p>一个优秀的学习笔记的网站 ,号称阿里十万人都在用的笔记与文档知识库</p>\r\n<p><img src=\"https://img-blog.csdnimg.cn/20200303163118378.png\" alt=\"在这里插入图片描述\"><br>支持一键建立模板学习笔记,也是对markdown语法支持最好的平台之一(毕竟就是蚂蚁金服程序员开发给程序员用的)。<br><img src=\"https://img-blog.csdnimg.cn/20200303163359815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br>看,这优美的界面,连学习都变得更加快乐了呢!<br><img src=\"https://img-blog.csdnimg.cn/20200303163522161.jpg\" alt=\"在这里插入图片描述\"></p>\r\n<pre><code>语雀平台 网址https://www.yuque.com/explore/headlines\r\n</code></pre>', '蒋伟伟', '程序人生', '软件推荐', '', '', '\r\n## 1. fortor懒设计 \r\n\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303155613473.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n你还在忍受PS漫长的加载?用懒设计吧,直接网页打开,不用下载安装,随时随地开始修图,任何简单的修图工作都能胜任。\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303160400253.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n\r\n```\r\nfortor懒设计 网址:https://www.fotor.com.cn/photo-editor-beta/editor/basic\r\n```\r\n\r\n## 2. removebg 在线抠图\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303161927488.gif)\r\n一键抠图,三秒完成PS几分钟的工作量。\r\n\r\n```\r\nremove.bg 网址https://www.remove.bg/zh/upload\r\n```\r\n\r\n### 3. panzoid视屏片头制作 \r\n自媒体盛行的新时代,你还在为制作视频片头而苦恼,来跟我一起用panzoid,两分钟搞定一切。\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/2020030317163852.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n\r\n在3Dtext里面可以自定义文本,建议搭配小飞机使用,网速快点。\r\n\r\n```\r\npanzoid网址: https://panzoid.com/\r\n```\r\n\r\n## 4. 智慧投屏 airdroid\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303162459713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n屏幕镜像,远程控制手机,监控周围,一个网址直接搞定!\r\n\r\n```\r\nairdroid智慧投屏 网址http://web.airdroid.com/\r\n```\r\n\r\n## 5. win10美化 \r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303160945522.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n哪一个cool boy不想要一个~~装逼~~ 帅气的桌面呢!win10美化官网,直接满足你对于桌面的终极幻想。\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303162626923.jpg)\r\n害羞⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄\r\n```\r\nwin10美化网址:https://zhutix.com/tag/win10-zhuti/\r\n```\r\n\r\n## 6. 今日热榜\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303161427334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n实时获取~~gayhub~~ GitHub最热门信息,让你不错过程序人生中的任何一次精彩。同时这个网站也支持其他资讯类网站诸如知乎、掘金等。\r\n\r\n```\r\n今日热榜 网址:https://tophub.today/\r\n```\r\n\r\n## 7. 掘金社区\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303162716951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n一个有着众多优秀开发者的平台。\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303163006801.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n\r\n```\r\n掘金社区 https://juejin.im/timeline\r\n```\r\n\r\n## 8. 语雀平台\r\n一个优秀的学习笔记的网站 ,号称阿里十万人都在用的笔记与文档知识库\r\n\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303163118378.png)\r\n支持一键建立模板学习笔记,也是对markdown语法支持最好的平台之一(毕竟就是蚂蚁金服程序员开发给程序员用的)。\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303163359815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYV95YW5iaW5n,size_16,color_FFFFFF,t_70)\r\n看,这优美的界面,连学习都变得更加快乐了呢!\r\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303163522161.jpg)\r\n\r\n```\r\n语雀平台 网址https://www.yuque.com/explore/headlines\r\n```\r\n\r\n\r\n\r\n');
INSERT INTO `article` VALUES (31, '2021-05-19 10:08:34', '2021-05-19 10:08:34', '【Python】Selenium简介', '<h2 id=\"h2-0-selenium-\"><a name=\"0. Selenium简介\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>0. Selenium简介</h2><p><em>Selenium</em>是一个用于Web应用程序测试的工具。</p>\r\n<p><em>Selenium</em>测试直接运行在浏览器中,就像真正的用户在操作一样。</p>\r\n<p>主流浏览器都支持。例如firefox,在插件市场里面就可以直接下载selenium IDE。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430115928011.png\" alt=\"image-20210430115928011\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120023959.png\" alt=\"image-20210430120023959\"></p>\r\n<h2 id=\"h2-1-\"><a name=\"1. 脚本录制\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>1. 脚本录制</h2><p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120120321.png\" alt=\"image-20210430120120321\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120253884.png\" alt=\"image-20210430120253884\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/2.gif\" alt=\"2\"></p>\r\n<h2 id=\"h2-2-py-\"><a name=\"2. 导出成Py脚本\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>2. 导出成Py脚本</h2><p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120511933.png\" alt=\"image-20210430120511933\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120524959.png\" alt=\"image-20210430120524959\"></p>\r\n<h2 id=\"h2-3-\"><a name=\"3. 运行脚本\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>3. 运行脚本</h2><p>导出脚本成功,桌面就出现了一个.py文件。但是这时候是没办法直接运行的。</p>\r\n<p>因为还缺少,运行脚本所需要的驱动。</p>\r\n<pre><code>https://github.com/mozilla/geckodriver/releases\r\n</code></pre><p>得去github下载。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120842550.png\" alt=\"image-20210430120842550\"></p>\r\n<p>下载好后,把他们放在一个文件夹里,使用IDE打开。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120929122.png\" alt=\"image-20210430120929122\"></p>\r\n<p>此时你发现,test_untitled.py 直接运行是没有效果的。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121059635.png\" alt=\"image-20210430121059635\"></p>\r\n<p>同时还得配置driver。</p>\r\n<h4 id=\"h4--\"><a name=\"重点圈图:\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>重点圈图:</h4><p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121914577.png\" alt=\"image-20210430121914577\"></p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121935551.png\" alt=\"image-20210430121935551\"></p>\r\n<h4 id=\"h4--\"><a name=\"完整实例代码:\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>完整实例代码:</h4><pre><code class=\"lang-python\"># Generated by Selenium IDE\r\nimport pytest\r\nimport time\r\nimport json\r\nfrom selenium import webdriver\r\nfrom selenium.webdriver.common.by import By\r\nfrom selenium.webdriver.common.action_chains import ActionChains\r\nfrom selenium.webdriver.support import expected_conditions\r\nfrom selenium.webdriver.support.wait import WebDriverWait\r\nfrom selenium.webdriver.common.keys import Keys\r\nfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilities\r\n\r\n\r\nclass TestUntitled():\r\n def setup_method(self, method=None):\r\n # ! 这边的method请将默认值设置为None\r\n self.driver = webdriver.Firefox(\r\n executable_path=r'D:\\Personal\\Desktop\\tmp\\geckodriver-v0.29.1-win64\\geckodriver.exe')\r\n # ! 请一定要改成自己的driver地址 (请使用绝对路径,比较稳妥)\r\n self.vars = {}\r\n\r\n def teardown_method(self, method):\r\n self.driver.quit()\r\n\r\n def test_untitled(self):\r\n self.driver.get("https://www.baidu.com/")\r\n self.driver.set_window_size(993, 696)\r\n self.driver.find_element(By.ID, "kw").click()\r\n element = self.driver.find_element(By.CSS_SELECTOR, "area")\r\n actions = ActionChains(self.driver)\r\n actions.move_to_element(element).perform()\r\n self.driver.find_element(By.ID, "kw").send_keys("11111")\r\n\r\n\r\nif __name__ == '__main__':\r\n # ! main方法中进行调用\r\n test = TestUntitled()\r\n test.setup_method()\r\n test.test_untitled()\r\n time.sleep(2)\r\n # 关闭程序\r\n test.teardown_method()\r\n</code></pre>\r\n', '蒋伟伟', 'Python程序设计', '软件测试', '', '', '## 0. Selenium简介\r\n\r\n*Selenium*是一个用于Web应用程序测试的工具。\r\n\r\n*Selenium*测试直接运行在浏览器中,就像真正的用户在操作一样。\r\n\r\n主流浏览器都支持。例如firefox,在插件市场里面就可以直接下载selenium IDE。\r\n\r\n![image-20210430115928011](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430115928011.png)\r\n\r\n\r\n\r\n![image-20210430120023959](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120023959.png)\r\n\r\n## 1. 脚本录制\r\n\r\n![image-20210430120120321](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120120321.png)\r\n\r\n![image-20210430120253884](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120253884.png)\r\n\r\n\r\n\r\n![2](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/2.gif)\r\n\r\n\r\n\r\n\r\n\r\n## 2. 导出成Py脚本\r\n\r\n![image-20210430120511933](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120511933.png)\r\n\r\n\r\n\r\n![image-20210430120524959](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120524959.png)\r\n\r\n## 3. 运行脚本\r\n\r\n导出脚本成功,桌面就出现了一个.py文件。但是这时候是没办法直接运行的。\r\n\r\n因为还缺少,运行脚本所需要的驱动。\r\n\r\n```\r\nhttps://github.com/mozilla/geckodriver/releases\r\n```\r\n\r\n得去github下载。\r\n\r\n![image-20210430120842550](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120842550.png)\r\n\r\n下载好后,把他们放在一个文件夹里,使用IDE打开。\r\n\r\n![image-20210430120929122](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430120929122.png)\r\n\r\n此时你发现,test_untitled.py 直接运行是没有效果的。\r\n\r\n![image-20210430121059635](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121059635.png)\r\n\r\n\r\n\r\n同时还得配置driver。\r\n\r\n#### 重点圈图:\r\n\r\n![image-20210430121914577](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121914577.png)\r\n\r\n\r\n\r\n![image-20210430121935551](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20210430121935551.png)\r\n\r\n\r\n\r\n#### 完整实例代码:\r\n\r\n```python\r\n# Generated by Selenium IDE\r\nimport pytest\r\nimport time\r\nimport json\r\nfrom selenium import webdriver\r\nfrom selenium.webdriver.common.by import By\r\nfrom selenium.webdriver.common.action_chains import ActionChains\r\nfrom selenium.webdriver.support import expected_conditions\r\nfrom selenium.webdriver.support.wait import WebDriverWait\r\nfrom selenium.webdriver.common.keys import Keys\r\nfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilities\r\n\r\n\r\nclass TestUntitled():\r\n def setup_method(self, method=None):\r\n # ! 这边的method请将默认值设置为None\r\n self.driver = webdriver.Firefox(\r\n executable_path=r\'D:\\Personal\\Desktop\\tmp\\geckodriver-v0.29.1-win64\\geckodriver.exe\')\r\n # ! 请一定要改成自己的driver地址 (请使用绝对路径,比较稳妥)\r\n self.vars = {}\r\n\r\n def teardown_method(self, method):\r\n self.driver.quit()\r\n\r\n def test_untitled(self):\r\n self.driver.get(\"https://www.baidu.com/\")\r\n self.driver.set_window_size(993, 696)\r\n self.driver.find_element(By.ID, \"kw\").click()\r\n element = self.driver.find_element(By.CSS_SELECTOR, \"area\")\r\n actions = ActionChains(self.driver)\r\n actions.move_to_element(element).perform()\r\n self.driver.find_element(By.ID, \"kw\").send_keys(\"11111\")\r\n\r\n\r\nif __name__ == \'__main__\':\r\n # ! main方法中进行调用\r\n test = TestUntitled()\r\n test.setup_method()\r\n test.test_untitled()\r\n time.sleep(2)\r\n # 关闭程序\r\n test.teardown_method()\r\n```\r\n\r\n\r\n');
INSERT INTO `article` VALUES (32, '2021-06-13 05:03:48', '2021-06-13 05:03:48', '关于JavaScript 数组 的一切', '<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/关于js数组的一切.jpg\" alt=\"关于js数组的一切\"></p>\r\n<h2 id=\"h2-js-\"><a name=\"JS里的”数组”不是数组,而是对象\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>JS里的”数组”不是数组,而是对象</h2><p>js里的数组和其他语言中的数组是不同的,实际它并不是数组,而是一种array-like 特性的对象。</p>\r\n<p>它只是把<strong>索引</strong>转化成<strong>字符串</strong>,用作其<strong>属性</strong>(键)。</p>\r\n<p>例如:</p>\r\n<pre><code class=\"lang-js\">var arr = ['a','b','c']\r\n// 实际上 等价于\r\nvar obj = {\r\n '0': 'a',\r\n '1': 'b',\r\n '2': 'c'\r\n}\r\n</code></pre>\r\n<p>这也正是为什么 typeof arr = object 的原因。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy9pbWFnZS0yMDIwMDcxNTIyMTIwMDIwMi5wbmc\" alt=\"image-20200715221200202\"></p>\r\n<p>js 里的 数组 操作起来和其他语言中的数组 操作相似,比如Java。</p>\r\n<p>但是同时js里的数组还能做到像Java这样强类型语言里的数组 做不到的地方。</p>\r\n<pre><code class=\"lang-js\">// js 单个数组中的元素可以有多种数据类型\r\nvar arr = [1,'2',false,[1]]; // 数据类型同时包括数字,字符串,布尔值,数组\r\n</code></pre>\r\n<p>而Java 里的单个数组里的元素只能是同一种数据类型,例如如果声明了int 数组,那么里面的元素就全是int类型的数据</p>\r\n<p><strong>毫无疑问,JS里的“数组”操作起来更加方便,但是这是牺牲性能换来的。</strong></p>\r\n<p>真正的数组是一段线性分配的内存,所以它操作起来速度更加快。</p>\r\n<h2 id=\"h2-u58F0u660Eu6570u7EC4u7684u65B9u6CD5\"><a name=\"声明数组的方法\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>声明数组的方法</h2><pre><code class=\"lang-js\">// 1. 直接创建\r\nvar arr = []; //[] 空数组\r\n// 2. new\r\nvar arr = new Array(); //[] 空数组\r\nvar arr = new Array(1,2,3); //[1,2,3]\r\n</code></pre>\r\n<p>对于数据中没有初始化的元素,它的值是undefined;</p>\r\n<pre><code class=\"lang-js\">var arr = [1,2]; //[1,2]\r\nconsole.log(arr[2]); // undefined\r\n</code></pre>\r\n<h2 id=\"h2--length-\"><a name=\"数组中的length属性\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>数组中的length属性</h2><p>Js“数组”中length是一个<strong>奇怪</strong>的属性</p>\r\n<p>它的结果并不完全可信。一般数据里的length指的是数组中<strong>有值元素的个数</strong></p>\r\n<p>而js里的length并不是。</p>\r\n<pre><code class=\"lang-js\">var arr = []; //[]\r\nconsole.log(arr.length); // 0\r\narr[5] = 1000;\r\nconsole.log(arr.length); // 1? 6?\r\n</code></pre>\r\n<p>答案是6,但数组 arr 实际有值的就一个。<br>js里的length 指的是 这个数组的最大整数<strong>属性名</strong>加上1,它不一定等于数组里属性的个数。</p>\r\n<p>此外,js里的length,你还可以随意的把它变大变小,(简称随地大小变)</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy8lRTYlQkIlOTElRTclQTglQkQuanBn\" alt=\"\"></p>\r\n<pre><code class=\"lang-js\">var arr = [1,2,3];\r\narr.length = 1;\r\nconsole.log(arr); // 猜一下arr现在等于什么\r\n</code></pre>\r\n<p>对,你没有猜错,arr 此时只剩下一个元素了,[1]</p>\r\n<p>通过将length变小,可以去掉所有属性名大于等于length的值</p>\r\n<p><strong>通过这一点,我们可以更加方便的删除元素。</strong></p>\r\n<pre><code class=\"lang-js\">arr.length = 0; //清空数组\r\narr.length = arr.length-1; //去除掉末尾元素\r\n</code></pre>\r\n<h2 id=\"h2-u5982u4F55u5224u5B9Au4E00u4E2Au5BF9u8C61u662Fu6570u7EC4\"><a name=\"如何判定一个对象是数组\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>如何判定一个对象是数组</h2><p>通过前面的讲解,我们已经知道了Js里的数组实际是一个对象,</p>\r\n<p>通过 typeof 来判断也是对象</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy9pbWFnZS0yMDIwMDcxNTIyMTIwMDIwMi5wbmc\" alt=\"image-20200715221200202\"></p>\r\n<p>那我们怎么判定一个数组是我们想要的js数组呢。</p>\r\n<pre><code class=\"lang-js\">function isArray(obj){\r\n return Object.prototype.toString.apply(obj) === '[object Array]';\r\n //这个可以直接拿去用,可确保是正确的\r\n}\r\n</code></pre>\r\n<h2 id=\"h2-u6570u7EC4u7684u679Au4E3E\"><a name=\"数组的枚举\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>数组的枚举</h2><pre><code class=\"lang-js\">let arr = [1,2,3];\r\n\r\n// 1. 普通for循环\r\nfor (let i = 0 ; i<arr.length ; i++){\r\n console.log(arr[i]);\r\n}\r\n\r\n// 2. for in 循环 (获取到的是索引)\r\nfor (let index in arr){\r\n console.log(arr[index]);\r\n}\r\n\r\n// 3. ES6新增 增强for循环 (获取到的是元素的值)\r\nfor(let item of arr){ \r\n console.log(item);\r\n}\r\n\r\n// 4. forEach 循环\r\narr.forEach(function(item,index){\r\n console.log(index,item);\r\n})\r\n</code></pre>\r\n<h2 id=\"h2-u6570u7EC4u7684u65B9u6CD5\"><a name=\"数组的方法\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>数组的方法</h2><p>任何语言对于数据的操作少不了增删改查,我们就先从这四个角度去看。</p>\r\n<h3 id=\"h3-u67E5\"><a name=\"查\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>查</h3><p>根据属性名去访问就好了 arr[index]</p>\r\n<h3 id=\"h3-u5220\"><a name=\"删\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>删</h3><pre><code class=\"lang-js\">//arr.shift() 删除第一个元素并返回\r\nlet arr = [1,2,3];\r\nlet element = arr.shift(); //element 是 1\r\nconsole.log(element);\r\n\r\n//arr.pop() 删除最后一个元素并返回\r\narr = [1,2,3];\r\nelement = arr.pop(); //element 是 3\r\nconsole.log(element);\r\n</code></pre>\r\n<h3 id=\"h3-u589E\"><a name=\"增\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>增</h3><pre><code class=\"lang-js\">// 和删除相对应,增加也有从头部增加和尾部增加\r\n\r\n// 插入单个元素\r\n// 1. 从头部插入 arr.unshift(item...)\r\nlet arr = [1,2,3];\r\narr.unshift(0);\r\nconsole.log(arr); //[0,1,2,3]\r\n\r\n// 2. 从尾部插入 arr.push(item...)\r\narr = [1,2,3];\r\narr.push(4);\r\nconsole.log(arr); //[1,2,3,4]\r\n\r\n// 插入多个元素\r\n// 显然如果插入多个元素,我们一个个去push是很麻烦的,所以提供了一个方法\r\n// arr.concat(item...) concat 这个单词的含义是合并数组;\r\narr1 = [1,2];\r\narr2 = [3,4];\r\narr = arr1.concat(arr2);\r\nconsole.log(arr); //[1,2,3,4] & arr1 没有改变 还是[1,2]\r\n\r\n\r\n// 关于从任意位置插入,在修改里面会讲\r\n</code></pre>\r\n<h3 id=\"h3-u6539\"><a name=\"改\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>改</h3><pre><code class=\"lang-js\">// 根据索引修改\r\narr[index] = value;\r\n\r\n// 数组修改其实要记一个 arr.splice(start,deleteCount,item...)\r\n/**\r\n* 参数 start:开始的索引\r\n* deleteCount : 删除元素的个数\r\n* item: 要插入的元素值\r\n* 返回值 被删除的元素数组\r\n*/\r\n\r\nlet arr = [1,2,3];\r\nlet a = arr.splice(0,1,'test'); //从0开始删除一个元素,并在这个位置插入元素'test'\r\nconsole.log(arr); //["test",1,2]\r\nconsole.log(a); // [1]\r\n</code></pre>\r\n<h3 id=\"h3-u989Du5916\"><a name=\"额外\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>额外</h3><ul>\r\n<li>数组转字符串</li></ul>\r\n<pre><code class=\"lang-js\">/**\r\n * arr.join(separator)\r\n * 数组转字符串 把数组的每个元素拿出来,用separator将他们分隔开来\r\n * 参数 separator 分隔符\r\n */\r\nlet arr = [1,2,3];\r\nlet c = arr.join(','); //1,2,3 将arr数组中的元素用逗号分割,并转换成字符串\r\nconsole.log(c);\r\n\r\n//其实等价于\r\nlet str = "";\r\nfor (item of arr){\r\n str += (item+',');\r\n}\r\nstr = str.substr(0,str.length-1); //去除掉最后一个逗号\r\nconsole.log(str);\r\n</code></pre>\r\n<ul>\r\n<li>数组复制</li></ul>\r\n<pre><code class=\"lang-js\">/**\r\n * 有的时候我们想复制数组中的一段元素,但是我们不想改变原数组\r\n * 就用 arr.slice(start,end)\r\n * 参数 start 开始索引\r\n * end 结束索引\r\n * 实际获取的元素是 [start,end) 左闭,右开 !!!\r\n * 基本上所有语言,(start,end)都是这样的规定\r\n */\r\n\r\nlet arr = [1,2,3];\r\nlet temp = arr.slice(0,2); \r\nconsole.log(temp); //[1,2]\r\n</code></pre>\r\n<ul>\r\n<li>数组反转</li></ul>\r\n<pre><code class=\"lang-js\">/**\r\n * 使用arr.reverse()反转数组\r\n */\r\nlet arr = [1,2,3];\r\narr.reverse() // 直接改变原数组\r\nconsole.log(arr); // [3,2,1]\r\n</code></pre>\r\n<p>本文中,因为js里的数组实际就是对象,所以所有数组的索引都叫做属性名。</p>\r\n', '蒋伟伟', '代码如诗', 'JavaScript', '', '', '\r\n\r\n![关于js数组的一切](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/关于js数组的一切.jpg)\r\n\r\n## JS里的\"数组\"不是数组,而是对象\r\n\r\njs里的数组和其他语言中的数组是不同的,实际它并不是数组,而是一种array-like 特性的对象。\r\n\r\n它只是把**索引**转化成**字符串**,用作其**属性**(键)。\r\n\r\n例如:\r\n\r\n```js\r\nvar arr = [\'a\',\'b\',\'c\']\r\n// 实际上 等价于\r\nvar obj = {\r\n \'0\': \'a\',\r\n \'1\': \'b\',\r\n \'2\': \'c\'\r\n}\r\n```\r\n\r\n\r\n\r\n这也正是为什么 typeof arr = object 的原因。\r\n\r\n![image-20200715221200202](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy9pbWFnZS0yMDIwMDcxNTIyMTIwMDIwMi5wbmc)\r\n\r\njs 里的 数组 操作起来和其他语言中的数组 操作相似,比如Java。\r\n\r\n但是同时js里的数组还能做到像Java这样强类型语言里的数组 做不到的地方。\r\n\r\n```js\r\n// js 单个数组中的元素可以有多种数据类型\r\nvar arr = [1,\'2\',false,[1]]; // 数据类型同时包括数字,字符串,布尔值,数组\r\n```\r\n\r\n而Java 里的单个数组里的元素只能是同一种数据类型,例如如果声明了int 数组,那么里面的元素就全是int类型的数据\r\n\r\n**毫无疑问,JS里的“数组”操作起来更加方便,但是这是牺牲性能换来的。**\r\n\r\n真正的数组是一段线性分配的内存,所以它操作起来速度更加快。\r\n\r\n## 声明数组的方法\r\n\r\n```js\r\n// 1. 直接创建\r\nvar arr = []; //[] 空数组\r\n// 2. new\r\nvar arr = new Array(); //[] 空数组\r\nvar arr = new Array(1,2,3); //[1,2,3]\r\n```\r\n\r\n对于数据中没有初始化的元素,它的值是undefined;\r\n\r\n```js\r\nvar arr = [1,2]; //[1,2]\r\nconsole.log(arr[2]); // undefined\r\n```\r\n\r\n## 数组中的length属性\r\n\r\nJs“数组”中length是一个**奇怪**的属性\r\n\r\n它的结果并不完全可信。一般数据里的length指的是数组中**有值元素的个数**\r\n\r\n而js里的length并不是。\r\n\r\n```js\r\nvar arr = []; //[]\r\nconsole.log(arr.length); // 0\r\narr[5] = 1000;\r\nconsole.log(arr.length); // 1? 6?\r\n```\r\n答案是6,但数组 arr 实际有值的就一个。\r\njs里的length 指的是 这个数组的最大整数**属性名**加上1,它不一定等于数组里属性的个数。\r\n\r\n此外,js里的length,你还可以随意的把它变大变小,(简称随地大小变)\r\n\r\n![](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy8lRTYlQkIlOTElRTclQTglQkQuanBn)\r\n\r\n```js\r\nvar arr = [1,2,3];\r\narr.length = 1;\r\nconsole.log(arr); // 猜一下arr现在等于什么\r\n```\r\n\r\n对,你没有猜错,arr 此时只剩下一个元素了,[1]\r\n\r\n通过将length变小,可以去掉所有属性名大于等于length的值\r\n\r\n**通过这一点,我们可以更加方便的删除元素。**\r\n\r\n```js\r\narr.length = 0; //清空数组\r\narr.length = arr.length-1; //去除掉末尾元素\r\n```\r\n\r\n## 如何判定一个对象是数组\r\n\r\n通过前面的讲解,我们已经知道了Js里的数组实际是一个对象,\r\n\r\n通过 typeof 来判断也是对象\r\n\r\n![image-20200715221200202](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/aHR0cDovL2ltZ2JlZC14aWEtMi5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL2ltZy9pbWFnZS0yMDIwMDcxNTIyMTIwMDIwMi5wbmc)\r\n\r\n那我们怎么判定一个数组是我们想要的js数组呢。\r\n\r\n```js\r\nfunction isArray(obj){\r\n return Object.prototype.toString.apply(obj) === \'[object Array]\';\r\n //这个可以直接拿去用,可确保是正确的\r\n}\r\n```\r\n\r\n\r\n\r\n## 数组的枚举\r\n\r\n```js\r\nlet arr = [1,2,3];\r\n \r\n// 1. 普通for循环\r\nfor (let i = 0 ; i<arr.length ; i++){\r\n console.log(arr[i]);\r\n}\r\n\r\n// 2. for in 循环 (获取到的是索引)\r\nfor (let index in arr){\r\n console.log(arr[index]);\r\n}\r\n\r\n// 3. ES6新增 增强for循环 (获取到的是元素的值)\r\nfor(let item of arr){ \r\n console.log(item);\r\n}\r\n\r\n// 4. forEach 循环\r\narr.forEach(function(item,index){\r\n console.log(index,item);\r\n})\r\n```\r\n\r\n\r\n\r\n## 数组的方法\r\n\r\n任何语言对于数据的操作少不了增删改查,我们就先从这四个角度去看。\r\n\r\n### 查\r\n\r\n根据属性名去访问就好了 arr[index]\r\n\r\n### 删\r\n\r\n```js\r\n//arr.shift() 删除第一个元素并返回\r\nlet arr = [1,2,3];\r\nlet element = arr.shift(); //element 是 1\r\nconsole.log(element);\r\n\r\n//arr.pop() 删除最后一个元素并返回\r\narr = [1,2,3];\r\nelement = arr.pop(); //element 是 3\r\nconsole.log(element);\r\n```\r\n\r\n### 增\r\n\r\n```js\r\n// 和删除相对应,增加也有从头部增加和尾部增加\r\n\r\n// 插入单个元素\r\n// 1. 从头部插入 arr.unshift(item...)\r\nlet arr = [1,2,3];\r\narr.unshift(0);\r\nconsole.log(arr); //[0,1,2,3]\r\n\r\n// 2. 从尾部插入 arr.push(item...)\r\narr = [1,2,3];\r\narr.push(4);\r\nconsole.log(arr); //[1,2,3,4]\r\n\r\n// 插入多个元素\r\n// 显然如果插入多个元素,我们一个个去push是很麻烦的,所以提供了一个方法\r\n// arr.concat(item...) concat 这个单词的含义是合并数组;\r\narr1 = [1,2];\r\narr2 = [3,4];\r\narr = arr1.concat(arr2);\r\nconsole.log(arr); //[1,2,3,4] & arr1 没有改变 还是[1,2]\r\n\r\n\r\n// 关于从任意位置插入,在修改里面会讲\r\n```\r\n\r\n\r\n\r\n### 改\r\n\r\n```js\r\n// 根据索引修改\r\narr[index] = value;\r\n\r\n// 数组修改其实要记一个 arr.splice(start,deleteCount,item...)\r\n/**\r\n* 参数 start:开始的索引\r\n* deleteCount : 删除元素的个数\r\n* item: 要插入的元素值\r\n* 返回值 被删除的元素数组\r\n*/\r\n\r\nlet arr = [1,2,3];\r\nlet a = arr.splice(0,1,\'test\'); //从0开始删除一个元素,并在这个位置插入元素\'test\'\r\nconsole.log(arr); //[\"test\",1,2]\r\nconsole.log(a); // [1]\r\n```\r\n\r\n\r\n\r\n### 额外\r\n\r\n- 数组转字符串\r\n\r\n```js\r\n/**\r\n * arr.join(separator)\r\n * 数组转字符串 把数组的每个元素拿出来,用separator将他们分隔开来\r\n * 参数 separator 分隔符\r\n */\r\nlet arr = [1,2,3];\r\nlet c = arr.join(\',\'); //1,2,3 将arr数组中的元素用逗号分割,并转换成字符串\r\nconsole.log(c);\r\n\r\n//其实等价于\r\nlet str = \"\";\r\nfor (item of arr){\r\n str += (item+\',\');\r\n}\r\nstr = str.substr(0,str.length-1); //去除掉最后一个逗号\r\nconsole.log(str);\r\n```\r\n\r\n- 数组复制\r\n\r\n```js\r\n/**\r\n * 有的时候我们想复制数组中的一段元素,但是我们不想改变原数组\r\n * 就用 arr.slice(start,end)\r\n * 参数 start 开始索引\r\n * end 结束索引\r\n * 实际获取的元素是 [start,end) 左闭,右开 !!!\r\n * 基本上所有语言,(start,end)都是这样的规定\r\n */\r\n\r\nlet arr = [1,2,3];\r\nlet temp = arr.slice(0,2); \r\nconsole.log(temp); //[1,2]\r\n```\r\n\r\n\r\n\r\n- 数组反转\r\n\r\n```js\r\n/**\r\n * 使用arr.reverse()反转数组\r\n */\r\nlet arr = [1,2,3];\r\narr.reverse() // 直接改变原数组\r\nconsole.log(arr); // [3,2,1]\r\n```\r\n\r\n\r\n\r\n\r\n本文中,因为js里的数组实际就是对象,所以所有数组的索引都叫做属性名。');
INSERT INTO `article` VALUES (33, '2021-06-13 05:05:43', '2021-06-13 05:05:43', '盘点JavaScript里面常用的方法', '<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/Js接口盘点.png\" alt=\"Js接口盘点\"></p>\r\n<h2 id=\"h2-array\"><a name=\"Array\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Array</h2><h4 id=\"h4-array-push-item-\"><a name=\"array.push(item…)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.push(item…)</h4><p>作用:往数组添加元素,尾部添加 </p>\r\n<h4 id=\"h4-array-unshift-item-\"><a name=\"array.unshift(item…)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.unshift(item…)</h4><p>作用:往数组添加元素,头部添加</p>\r\n<h4 id=\"h4-array-concat-item-\"><a name=\"array.concat(item…)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.concat(item…)</h4><p>作用:把 元素 插入数组,和push不同的点在于,concat可以指定元素是数组,即把一个数组在尾部插入。</p>\r\n<pre><code class=\"lang-js\">// 和删除相对应,增加也有从头部增加和尾部增加\r\n\r\n// 插入单个元素\r\n// 1. 从头部插入 arr.unshift(item...)\r\nlet arr = [1,2,3];\r\narr.unshift(0);\r\nconsole.log(arr); //[0,1,2,3]\r\n\r\n// 2. 从尾部插入 arr.push(item...)\r\narr = [1,2,3];\r\narr.push(4);\r\nconsole.log(arr); //[1,2,3,4]\r\n\r\n// 3. 插入多个元素\r\n// 显然如果插入多个元素,我们一个个去push是很麻烦的,所以提供了一个方法\r\n// arr.concat(item...) concat 这个单词的含义是合并数组;\r\narr1 = [1,2];\r\narr2 = [3,4];\r\narr = arr1.concat(arr2);\r\nconsole.log(arr); //[1,2,3,4] & arr1 没有改变 还是[1,2]\r\n</code></pre>\r\n<h4 id=\"h4-array-pop-\"><a name=\"array.pop()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.pop()</h4><p>作用:删除元素,从尾部删除</p>\r\n<h4 id=\"h4-array-shift-\"><a name=\"array.shift()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.shift()</h4><p>作用:删除元素,从头部删除</p>\r\n<pre><code class=\"lang-js\">//arr.shift() 删除第一个元素并返回\r\nlet arr = [1,2,3];\r\nlet element = arr.shift(); //element 是 1\r\nconsole.log(element);\r\n\r\n//arr.pop() 删除最后一个元素并返回\r\narr = [1,2,3];\r\nelement = arr.pop(); //element 是 3\r\nconsole.log(element);\r\n</code></pre>\r\n<h4 id=\"h4-array-reverse-\"><a name=\"array.reverse()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.reverse()</h4><p>作用: 反转数组的顺序,并返回array本身</p>\r\n<pre><code class=\"lang-JavaScript\">/**\r\n * 使用arr.reverse()反转数组\r\n */\r\nlet arr = [1,2,3];\r\narr.reverse() // 直接改变原数组\r\nconsole.log(arr); // [3,2,1]\r\n</code></pre>\r\n<h4 id=\"h4-arry-slice-start-end-\"><a name=\"arry.slice(start,end)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>arry.slice(start,end)</h4><p>作用:复制array里的一段内容</p>\r\n<pre><code class=\"lang-JavaScript\">/**\r\n * 有的时候我们想复制数组中的一段元素,但是我们不想改变原数组\r\n * 就用 arr.slice(start,end)\r\n * 参数 start 开始索引\r\n * end 结束索引\r\n * 实际获取的元素是 [start,end) 左闭,右开 !!!\r\n * 基本上所有语言,(start,end)都是这样的规定\r\n */\r\n\r\nlet arr = [1,2,3];\r\nlet temp = arr.slice(0,2); \r\nconsole.log(temp); //[1,2]\r\n</code></pre>\r\n<h4 id=\"h4-array-join-separator-\"><a name=\"array.join(separator)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.join(separator)</h4><p>作用:数组转字符串,将数组里面的元素拿出来用separator(分隔符)串联在一起,变成字符串</p>\r\n<pre><code class=\"lang-js\">/**\r\n * arr.join(separator)\r\n * 数组转字符串 把数组的每个元素拿出来,用separator将他们分隔开来\r\n * 参数 separator 分隔符\r\n */\r\nlet arr = [1,2,3];\r\nlet c = arr.join(','); //1,2,3 将arr数组中的元素用逗号分割,并转换成字符串\r\nconsole.log(c);\r\n\r\n//其实等价于\r\nlet str = "";\r\nfor (item of arr){\r\n str += (item+',');\r\n}\r\nstr = str.substr(0,str.length-1); //去除掉最后一个逗号\r\nconsole.log(str);\r\n</code></pre>\r\n<h4 id=\"h4-array-sort-comparefn-\"><a name=\"array.sort(comparefn)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.sort(comparefn)</h4><p>作用:数组排序(并不一定可靠)</p>\r\n<pre><code class=\"lang-javascript\">var arr1 = [3,2,1];\r\nconsole.log(arr1.sort()); // 输出 [1,2,3]\r\nvar arr2 = [4,8,15,23];\r\nconsole.log(arr2.sort()); // 输出 [15, 23, 4, 8] ???\r\n/**\r\n * 也许聪明的你,已经看出规律了,\r\n * arr.sort() 它只排序了比对了数据第一位。\r\n * arr2,它将8和15做比较大小的时候,是将8和1比较的,\r\n * 所以,15才会在8前面。\r\n */\r\n\r\n//arr.sort(comparefn) 可以通过接受一个compare参数来进行更加精准排序\r\narr2.sort(function(a,b){\r\n return a-b;\r\n});\r\nconsole.log(arr2); // [4, 8, 15, 23] 此时结果正确了\r\n// 你的比较函数应该接受两个参数,并且如果两个参数相等则返回0\r\n// 如果两个参数不等,且第一个参数排在前面,则返回一个负数\r\n// 如果两个参数不等,且第二个参数排在前面,则返回一个正数\r\n</code></pre>\r\n<h4 id=\"h4-array-splice-start-deletecount-item-\"><a name=\"array.splice(start,deleteCount,item…)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>array.splice(start,deleteCount,item…)</h4><p>作用:全能王,能同时实现删除和插入。</p>\r\n<pre><code class=\"lang-JavaScript\">// arr.splice(start,deleteCount,item...)\r\n/**\r\n* 参数 start:开始的索引\r\n* deleteCount : 删除元素的个数\r\n* item: 要插入的元素值\r\n* 返回值 被删除的元素数组\r\n*/\r\n\r\nlet arr = [1,2,3];\r\nlet a = arr.splice(0,1,'test'); //从0开始删除一个元素,并在这个位置插入元素'test'\r\nconsole.log(arr); //["test",1,2]\r\nconsole.log(a); // [1]\r\n</code></pre>\r\n<h4 id=\"h4-array-isarray-item-\"><a name=\"Array.isArray(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Array.isArray(item)</h4><p>作用:判定一个元素是否是数组</p>\r\n<pre><code class=\"lang-javascript\">Array.isArray([1, 2, 3]); \r\n// true\r\nArray.isArray({foo: 123}); \r\n// false\r\nArray.isArray("foobar"); \r\n// false\r\nArray.isArray(undefined); \r\n// false\r\n</code></pre>\r\n<p>自此,关于数组的常用方法(API) 就学习完了。</p>\r\n<h2 id=\"h2-number\"><a name=\"Number\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Number</h2><h4 id=\"h4-number-tostring-\"><a name=\"number.toString()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>number.toString()</h4><p>作用:数字类型转字符串</p>\r\n<h4 id=\"h4-number-parseint-item-\"><a name=\"Number.parseInt(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Number.parseInt(item)</h4><p>作用:将字符串,转换成整数,当item不是字符串时,会调用tostring方法,把它变成string</p>\r\n<h4 id=\"h4-number-parsefloat-item-\"><a name=\"Number.parseFloat(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Number.parseFloat(item)</h4><p>作用:将字符串,转换成浮点数,当item不是字符串时,会调用tostring方法,把它变成string</p>\r\n<pre><code class=\"lang-javascript\">// 1. \r\nvar num = 3.14;\r\nconsole.log(num.toString(),typeof num,typeof num.toString());\r\n// 输出 3.14 number string\r\n// 2.\r\nconsole.log(Number.parseInt(num)); //3\r\nconsole.log(Number.parseInt("3.14")); //3 \r\n// 3.\r\nconsole.log(Number.parseFloat("3.14"),typeof Number.parseFloat("3.14"));\r\n// 输出 3.14 "number"\r\n</code></pre>\r\n<h4 id=\"h4-number-isnan-item-\"><a name=\"Number.isNaN(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Number.isNaN(item)</h4><p>作用:判定一个数值是否NaN</p>\r\n<pre><code class=\"lang-javascript\">/**\r\n * NaN的数据类型是number,它不等于任何值,也不等于它自己\r\n * console.log(NaN === NaN); //false\r\n*/\r\n\r\nNumber.isNaN(NaN); // true\r\nNumber.isNaN(Number.NaN); // true\r\nNumber.isNaN(0 / 0) // true\r\n\r\n// 下面这几个如果使用全局的 isNaN() 时,会返回 true。(一定要使用Number.isNaN,而不是 isNaN,会引起如下错误)\r\nNumber.isNaN("NaN"); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。\r\nNumber.isNaN(undefined); // false\r\nNumber.isNaN({}); // false\r\nNumber.isNaN("blabla"); // false\r\n</code></pre>\r\n<h4 id=\"h4-number-isinteger-item-\"><a name=\"Number.isInteger(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Number.isInteger(item)</h4><p>作用:判定一个数是否是整数</p>\r\n<pre><code class=\"lang-javascript\">console.log(Number.isInteger(3)); //true\r\nconsole.log(Number.isInteger(3.14)); //false\r\nconsole.log(Number.isInteger(undefined));//false\r\n</code></pre>\r\n<h2 id=\"h2-object\"><a name=\"Object\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Object</h2><h4 id=\"h4-object-hasownproperty-item-\"><a name=\"object.hasOwnProperty(item)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>object.hasOwnProperty(item)</h4><p>作用:判定对象是否拥有某属性</p>\r\n<pre><code class=\"lang-javascript\">var obj = {\r\n name:"tom",\r\n age:18\r\n}\r\nconsole.log(obj.hasOwnProperty("name")); // true\r\nconsole.log(obj.hasOwnProperty("weigth")); // false\r\n</code></pre>\r\n<h4 id=\"h4-object-keys-\"><a name=\"object.keys()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>object.keys()</h4><p>作用:返回对象所有的属性,作为数组</p>\r\n<pre><code class=\"lang-javascript\">var obj = {\r\n name:"tom",\r\n age:18\r\n}\r\nconsole.log(Object.keys(obj)); //["name", "age"]\r\n</code></pre>\r\n<h4 id=\"h4-object-values-\"><a name=\"object.values()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>object.values()</h4><p>作用: 返回对象所有的值,作为数组</p>\r\n<pre><code class=\"lang-javascript\">var obj = {\r\n name:"tom",\r\n age:18\r\n}\r\nconsole.log(Object.values(obj)); // ["tom", 18]\r\n</code></pre>\r\n<h3 id=\"h3--object-json\"><a name=\"补充:object的子集JSON\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>补充:object的子集JSON</h3><p>JSON只有两个方法 </p>\r\n<h4 id=\"h4-json-stringify-\"><a name=\"JSON.stringify()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>JSON.stringify()</h4><p>作用:返回与指定值对应的JSON字符串。即对象类型转字符串,常用于数据传输。</p>\r\n<h4 id=\"h4-json-parse-\"><a name=\"JSON.parse()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>JSON.parse()</h4><p>作用:解析JSON字符串并返回对应的值。即字符串转对象类型,常用于数据传输。</p>\r\n<p>这俩在JSON格式的数据传输中必不可少。前后端交互少不了它们。</p>\r\n<pre><code class=\"lang-javascript\">var obj = {\r\n name: "tom",\r\n age: 18\r\n}\r\n\r\nconsole.log(JSON.stringify(obj),typeof JSON.stringify(obj));\r\n// {"name":"tom","age":18} 数据类型:string\r\n\r\nvar str = '{"name":"tom","age":18}';\r\nconsole.log(JSON.parse(str),typeof JSON.parse(str));\r\n// {name: "tom", age: 18} 数据类型 object\r\n</code></pre>\r\n<h2 id=\"h2-string\"><a name=\"String\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>String</h2><h4 id=\"h4-string-charat-pos-\"><a name=\"string.charAt(pos)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.charAt(pos)</h4><p>作用:返回字符串在对应索引处的值</p>\r\n<pre><code class=\"lang-javascript\">var str = "hello";\r\nconsole.log(str.charAt(0)); // h\r\nconsole.log(str[0]); // h \r\n// 这两种结果是一样的,都是返回字符串在对应索引处的值\r\n</code></pre>\r\n<h4 id=\"h4-string-concat-string-\"><a name=\"string.concat(string…)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.concat(string…)</h4><p>作用:把字符串连接起来构成一个新的字符串(常用+运算符把它替代)</p>\r\n<pre><code class=\"lang-javascript\">var str1 = "hello";\r\nvar str2 = " world!";\r\nvar str = str1.concat(str2);\r\nconsole.log(str); //hello world!\r\nconsole.log(str1+str2); //hello world!\r\n// 建议使用+运算符进行字符串拼接\r\n// 现阶段浏览器引擎都对+运算符做过优化,它的性能并不低\r\n</code></pre>\r\n<h4 id=\"h4-string-indexof-searchstring-position-\"><a name=\"string.indexof(searchString,position)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.indexof(searchString,position)</h4><p>作用:查找searchString在string 中第一次出现的位置,返回值如果是-1,说明没找到</p>\r\n<h4 id=\"h4-string-lastindexof-searchstring-position-\"><a name=\"string.lastIndexOf(searchString,position)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.lastIndexOf(searchString,position)</h4><p>作用:从末尾开始查找searchString在string 中第一次出现的位置,返回值如果是-1,说明没找到</p>\r\n<pre><code class=\"lang-javascript\">var str = "hello world";\r\nconsole.log(str.indexOf("h")); //0\r\n// 不指定postion,默认postion=0\r\nconsole.log(str.indexOf("o")); // 4\r\nconsole.log(str.indexOf("o",5)); // 7\r\n\r\n// 从末尾查找\r\nconsole.log(str.lastIndexOf("o")); //7\r\n\r\n// 没找到返回-1\r\nconsole.log(str.indexOf("s")); // -1\r\n</code></pre>\r\n<h4 id=\"h4-string-search-regexp-\"><a name=\"string.search(regexp)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.search(regexp)</h4><p>作用:search方法和indexof方法类似,但是只能接受一个正则表达式作为参数</p>\r\n<pre><code class=\"lang-javascript\">var str = "hey JudE";\r\nvar re = /[A-Z]/g;\r\nvar re2 = /[.]/g;\r\nconsole.log(str.search(re)); // returns 4, 对应的是 "J"\r\nconsole.log(str.search(re2)); // returns -1,没能找到 '.'\r\n</code></pre>\r\n<h4 id=\"h4-string-substring-start-end-\"><a name=\"string.substring(start,end)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.substring(start,end)</h4><p>作用:截取字符串(缺点参数start,end不能是负数)</p>\r\n<h4 id=\"h4-string-slice-start-end-\"><a name=\"string.slice(start,end)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.slice(start,end)</h4><p>作用:和substring功能类似,但是它的参数start,end 可以接受负数(请尽量使用slice,而不是substring,slice比substring更加强大)</p>\r\n<pre><code class=\"lang-javascript\">var str = "hello world";\r\nconsole.log(str.substring(6,str.length)); //world\r\nconsole.log(str.slice(6,str.length));//world\r\n\r\n// 但是substring 不支持 负数\r\nconsole.log(str.substring(-5,str.length)); // 它会输出一个不合理的值\r\nconsole.log(str.slice(-5,str.length)); // world\r\n\r\n/**\r\n * 当时用str.slice 时,-1对应的就是最后一个字符\r\n * 上例中 \r\n * -1 对应的是 字母d\r\n * -2 对应的是倒数第二个 也就是 字母l\r\n * 请尽量用slice 取代 substring\r\n */\r\n</code></pre>\r\n<h4 id=\"h4-string-split-separator-limit-\"><a name=\"string.split(separator,limit)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.split(separator,limit)</h4><p>作用:字符串转数组</p>\r\n<pre><code class=\"lang-javascript\">/**\r\n * string.split \r\n * 参数介绍:\r\n * separator:分隔符\r\n * limit: 生成数组元素个数 \r\n */\r\nvar str = "1,2,3";\r\nvar arr = str.split(",",2);\r\nconsole.log(arr); // ["1", "2"]\r\n</code></pre>\r\n<h4 id=\"h4-string-tolowercase-\"><a name=\"string.toLowerCase()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.toLowerCase()</h4><p>作用:字符串全部转小写</p>\r\n<h4 id=\"h4-string-touppercase-\"><a name=\"string.toUpperCase()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>string.toUpperCase()</h4><p>作用:字符串全部转大写</p>\r\n<pre><code class=\"lang-javascript\">var str = "Hello WORLD";\r\nconsole.log(str.toLowerCase()); //hello world\r\nconsole.log(str.toUpperCase()); //HELLO WORLD\r\n</code></pre>\r\n<h2 id=\"h2-date\"><a name=\"Date\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Date</h2><h4 id=\"h4-date-tolocalestring-\"><a name=\"date.toLocaleString()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>date.toLocaleString()</h4><p>作用:转化成本地时间,包含完成的年月日和时分秒。</p>\r\n<h4 id=\"h4-date-tolocaledatestring-\"><a name=\"date.toLocaleDateString()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>date.toLocaleDateString()</h4><p>作用:转化成本地时间,包含完成的年月日。</p>\r\n<h4 id=\"h4-date-tolocaletimestring-\"><a name=\"date.toLocaleTimeString()\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>date.toLocaleTimeString()</h4><p>作用:转化成本地时间,包含完成的时分秒。</p>\r\n<pre><code class=\"lang-javascript\">var date = new Date();\r\n\r\nconsole.log(date.toLocaleDateString());// 日期 2020/7/23\r\n\r\nconsole.log(date.getFullYear()); // 2020\r\nconsole.log(date.getMonth()); //6\r\nconsole.log(date.getDate()); // 23\r\n\r\nconsole.log(date.toLocaleTimeString()); //上午10:44:26\r\n\r\nconsole.log(date.getHours()); // 10\r\nconsole.log(date.getMinutes()); // 44\r\nconsole.log(date.getSeconds()); // 26\r\n\r\nconsole.log(date.toLocaleString()); // 2020/7/23 上午10:47:45\r\n\r\nvar date = new Date(2020,01,02,11,11,11); \r\n// 依次为 年,月,日,时,分,秒\r\n// 2020/2/2 上午11:11:11 实际月份 = 设置的+1\r\nconsole.log(date.toLocaleString());\r\n</code></pre>\r\n<p>好了,这就是全部内容了,如果觉得对你有所帮助的话就点个赞吧。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/点赞.jpg\" alt=\"\"></p>\r\n<p>么么哒</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/么么哒.png\" alt=\"\"></p>\r\n', '蒋伟伟', '代码如诗', 'JavaScript,js', '', '', '![Js接口盘点](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/Js接口盘点.png)\r\n\r\n## Array\r\n\r\n#### array.push(item...)\r\n\r\n作用:往数组添加元素,尾部添加 \r\n\r\n#### array.unshift(item...)\r\n\r\n作用:往数组添加元素,头部添加\r\n\r\n#### array.concat(item...)\r\n\r\n作用:把 元素 插入数组,和push不同的点在于,concat可以指定元素是数组,即把一个数组在尾部插入。\r\n\r\n```js\r\n// 和删除相对应,增加也有从头部增加和尾部增加\r\n\r\n// 插入单个元素\r\n// 1. 从头部插入 arr.unshift(item...)\r\nlet arr = [1,2,3];\r\narr.unshift(0);\r\nconsole.log(arr); //[0,1,2,3]\r\n\r\n// 2. 从尾部插入 arr.push(item...)\r\narr = [1,2,3];\r\narr.push(4);\r\nconsole.log(arr); //[1,2,3,4]\r\n\r\n// 3. 插入多个元素\r\n// 显然如果插入多个元素,我们一个个去push是很麻烦的,所以提供了一个方法\r\n// arr.concat(item...) concat 这个单词的含义是合并数组;\r\narr1 = [1,2];\r\narr2 = [3,4];\r\narr = arr1.concat(arr2);\r\nconsole.log(arr); //[1,2,3,4] & arr1 没有改变 还是[1,2]\r\n```\r\n\r\n#### array.pop()\r\n\r\n作用:删除元素,从尾部删除\r\n\r\n#### array.shift()\r\n\r\n作用:删除元素,从头部删除\r\n\r\n```js\r\n//arr.shift() 删除第一个元素并返回\r\nlet arr = [1,2,3];\r\nlet element = arr.shift(); //element 是 1\r\nconsole.log(element);\r\n\r\n//arr.pop() 删除最后一个元素并返回\r\narr = [1,2,3];\r\nelement = arr.pop(); //element 是 3\r\nconsole.log(element);\r\n```\r\n\r\n#### array.reverse()\r\n\r\n作用: 反转数组的顺序,并返回array本身\r\n\r\n```JavaScript\r\n/**\r\n * 使用arr.reverse()反转数组\r\n */\r\nlet arr = [1,2,3];\r\narr.reverse() // 直接改变原数组\r\nconsole.log(arr); // [3,2,1]\r\n```\r\n\r\n#### arry.slice(start,end)\r\n\r\n作用:复制array里的一段内容\r\n\r\n```JavaScript\r\n/**\r\n * 有的时候我们想复制数组中的一段元素,但是我们不想改变原数组\r\n * 就用 arr.slice(start,end)\r\n * 参数 start 开始索引\r\n * end 结束索引\r\n * 实际获取的元素是 [start,end) 左闭,右开 !!!\r\n * 基本上所有语言,(start,end)都是这样的规定\r\n */\r\n\r\nlet arr = [1,2,3];\r\nlet temp = arr.slice(0,2); \r\nconsole.log(temp); //[1,2]\r\n```\r\n\r\n#### array.join(separator)\r\n\r\n作用:数组转字符串,将数组里面的元素拿出来用separator(分隔符)串联在一起,变成字符串\r\n\r\n```js\r\n/**\r\n * arr.join(separator)\r\n * 数组转字符串 把数组的每个元素拿出来,用separator将他们分隔开来\r\n * 参数 separator 分隔符\r\n */\r\nlet arr = [1,2,3];\r\nlet c = arr.join(\',\'); //1,2,3 将arr数组中的元素用逗号分割,并转换成字符串\r\nconsole.log(c);\r\n\r\n//其实等价于\r\nlet str = \"\";\r\nfor (item of arr){\r\n str += (item+\',\');\r\n}\r\nstr = str.substr(0,str.length-1); //去除掉最后一个逗号\r\nconsole.log(str);\r\n```\r\n\r\n#### array.sort(comparefn)\r\n\r\n作用:数组排序(并不一定可靠)\r\n\r\n```javascript\r\nvar arr1 = [3,2,1];\r\nconsole.log(arr1.sort()); // 输出 [1,2,3]\r\nvar arr2 = [4,8,15,23];\r\nconsole.log(arr2.sort()); // 输出 [15, 23, 4, 8] ???\r\n/**\r\n * 也许聪明的你,已经看出规律了,\r\n * arr.sort() 它只排序了比对了数据第一位。\r\n * arr2,它将8和15做比较大小的时候,是将8和1比较的,\r\n * 所以,15才会在8前面。\r\n */\r\n\r\n//arr.sort(comparefn) 可以通过接受一个compare参数来进行更加精准排序\r\narr2.sort(function(a,b){\r\n return a-b;\r\n});\r\nconsole.log(arr2); // [4, 8, 15, 23] 此时结果正确了\r\n// 你的比较函数应该接受两个参数,并且如果两个参数相等则返回0\r\n// 如果两个参数不等,且第一个参数排在前面,则返回一个负数\r\n// 如果两个参数不等,且第二个参数排在前面,则返回一个正数\r\n```\r\n\r\n#### array.splice(start,deleteCount,item...)\r\n\r\n作用:全能王,能同时实现删除和插入。\r\n\r\n```JavaScript\r\n// arr.splice(start,deleteCount,item...)\r\n/**\r\n* 参数 start:开始的索引\r\n* deleteCount : 删除元素的个数\r\n* item: 要插入的元素值\r\n* 返回值 被删除的元素数组\r\n*/\r\n\r\nlet arr = [1,2,3];\r\nlet a = arr.splice(0,1,\'test\'); //从0开始删除一个元素,并在这个位置插入元素\'test\'\r\nconsole.log(arr); //[\"test\",1,2]\r\nconsole.log(a); // [1]\r\n```\r\n\r\n#### Array.isArray(item)\r\n\r\n作用:判定一个元素是否是数组\r\n\r\n```javascript\r\nArray.isArray([1, 2, 3]); \r\n// true\r\nArray.isArray({foo: 123}); \r\n// false\r\nArray.isArray(\"foobar\"); \r\n// false\r\nArray.isArray(undefined); \r\n// false\r\n```\r\n\r\n自此,关于数组的常用方法(API) 就学习完了。\r\n\r\n## Number\r\n\r\n#### number.toString()\r\n\r\n作用:数字类型转字符串\r\n\r\n#### Number.parseInt(item)\r\n\r\n作用:将字符串,转换成整数,当item不是字符串时,会调用tostring方法,把它变成string\r\n\r\n#### Number.parseFloat(item)\r\n\r\n作用:将字符串,转换成浮点数,当item不是字符串时,会调用tostring方法,把它变成string\r\n\r\n```javascript\r\n// 1. \r\nvar num = 3.14;\r\nconsole.log(num.toString(),typeof num,typeof num.toString());\r\n// 输出 3.14 number string\r\n// 2.\r\nconsole.log(Number.parseInt(num)); //3\r\nconsole.log(Number.parseInt(\"3.14\")); //3 \r\n// 3.\r\nconsole.log(Number.parseFloat(\"3.14\"),typeof Number.parseFloat(\"3.14\"));\r\n// 输出 3.14 \"number\"\r\n```\r\n\r\n#### Number.isNaN(item)\r\n\r\n作用:判定一个数值是否NaN\r\n\r\n```javascript\r\n/**\r\n * NaN的数据类型是number,它不等于任何值,也不等于它自己\r\n * console.log(NaN === NaN); //false\r\n*/\r\n\r\nNumber.isNaN(NaN); // true\r\nNumber.isNaN(Number.NaN); // true\r\nNumber.isNaN(0 / 0) // true\r\n\r\n// 下面这几个如果使用全局的 isNaN() 时,会返回 true。(一定要使用Number.isNaN,而不是 isNaN,会引起如下错误)\r\nNumber.isNaN(\"NaN\"); // false,字符串 \"NaN\" 不会被隐式转换成数字 NaN。\r\nNumber.isNaN(undefined); // false\r\nNumber.isNaN({}); // false\r\nNumber.isNaN(\"blabla\"); // false\r\n\r\n```\r\n\r\n#### Number.isInteger(item)\r\n\r\n作用:判定一个数是否是整数\r\n\r\n```javascript\r\nconsole.log(Number.isInteger(3)); //true\r\nconsole.log(Number.isInteger(3.14)); //false\r\nconsole.log(Number.isInteger(undefined));//false\r\n```\r\n\r\n## Object\r\n\r\n#### object.hasOwnProperty(item)\r\n\r\n作用:判定对象是否拥有某属性\r\n\r\n```javascript\r\nvar obj = {\r\n name:\"tom\",\r\n age:18\r\n}\r\nconsole.log(obj.hasOwnProperty(\"name\")); // true\r\nconsole.log(obj.hasOwnProperty(\"weigth\")); // false\r\n```\r\n\r\n#### object.keys()\r\n\r\n作用:返回对象所有的属性,作为数组\r\n\r\n```javascript\r\nvar obj = {\r\n name:\"tom\",\r\n age:18\r\n}\r\nconsole.log(Object.keys(obj)); //[\"name\", \"age\"]\r\n```\r\n\r\n#### object.values()\r\n\r\n作用: 返回对象所有的值,作为数组\r\n\r\n```javascript\r\nvar obj = {\r\n name:\"tom\",\r\n age:18\r\n}\r\nconsole.log(Object.values(obj)); // [\"tom\", 18]\r\n```\r\n\r\n### 补充:object的子集JSON\r\n\r\nJSON只有两个方法 \r\n\r\n#### JSON.stringify()\r\n\r\n作用:返回与指定值对应的JSON字符串。即对象类型转字符串,常用于数据传输。\r\n\r\n#### JSON.parse()\r\n\r\n作用:解析JSON字符串并返回对应的值。即字符串转对象类型,常用于数据传输。\r\n\r\n这俩在JSON格式的数据传输中必不可少。前后端交互少不了它们。\r\n\r\n```javascript\r\nvar obj = {\r\n name: \"tom\",\r\n age: 18\r\n}\r\n\r\nconsole.log(JSON.stringify(obj),typeof JSON.stringify(obj));\r\n// {\"name\":\"tom\",\"age\":18} 数据类型:string\r\n\r\nvar str = \'{\"name\":\"tom\",\"age\":18}\';\r\nconsole.log(JSON.parse(str),typeof JSON.parse(str));\r\n// {name: \"tom\", age: 18} 数据类型 object\r\n```\r\n\r\n\r\n\r\n## String\r\n\r\n#### string.charAt(pos)\r\n\r\n作用:返回字符串在对应索引处的值\r\n\r\n```javascript\r\nvar str = \"hello\";\r\nconsole.log(str.charAt(0)); // h\r\nconsole.log(str[0]); // h \r\n// 这两种结果是一样的,都是返回字符串在对应索引处的值\r\n```\r\n\r\n#### string.concat(string...)\r\n\r\n作用:把字符串连接起来构成一个新的字符串(常用+运算符把它替代)\r\n\r\n```javascript\r\nvar str1 = \"hello\";\r\nvar str2 = \" world!\";\r\nvar str = str1.concat(str2);\r\nconsole.log(str); //hello world!\r\nconsole.log(str1+str2); //hello world!\r\n// 建议使用+运算符进行字符串拼接\r\n// 现阶段浏览器引擎都对+运算符做过优化,它的性能并不低\r\n```\r\n\r\n#### string.indexof(searchString,position)\r\n\r\n作用:查找searchString在string 中第一次出现的位置,返回值如果是-1,说明没找到\r\n\r\n#### string.lastIndexOf(searchString,position)\r\n\r\n作用:从末尾开始查找searchString在string 中第一次出现的位置,返回值如果是-1,说明没找到\r\n\r\n```javascript\r\nvar str = \"hello world\";\r\nconsole.log(str.indexOf(\"h\")); //0\r\n// 不指定postion,默认postion=0\r\nconsole.log(str.indexOf(\"o\")); // 4\r\nconsole.log(str.indexOf(\"o\",5)); // 7\r\n\r\n// 从末尾查找\r\nconsole.log(str.lastIndexOf(\"o\")); //7\r\n\r\n// 没找到返回-1\r\nconsole.log(str.indexOf(\"s\")); // -1\r\n```\r\n\r\n\r\n\r\n#### string.search(regexp)\r\n\r\n作用:search方法和indexof方法类似,但是只能接受一个正则表达式作为参数\r\n\r\n```javascript\r\nvar str = \"hey JudE\";\r\nvar re = /[A-Z]/g;\r\nvar re2 = /[.]/g;\r\nconsole.log(str.search(re)); // returns 4, 对应的是 \"J\"\r\nconsole.log(str.search(re2)); // returns -1,没能找到 \'.\'\r\n```\r\n\r\n#### string.substring(start,end)\r\n\r\n作用:截取字符串(缺点参数start,end不能是负数)\r\n\r\n#### string.slice(start,end)\r\n\r\n作用:和substring功能类似,但是它的参数start,end 可以接受负数(请尽量使用slice,而不是substring,slice比substring更加强大)\r\n\r\n```javascript\r\nvar str = \"hello world\";\r\nconsole.log(str.substring(6,str.length)); //world\r\nconsole.log(str.slice(6,str.length));//world\r\n\r\n// 但是substring 不支持 负数\r\nconsole.log(str.substring(-5,str.length)); // 它会输出一个不合理的值\r\nconsole.log(str.slice(-5,str.length)); // world\r\n\r\n/**\r\n * 当时用str.slice 时,-1对应的就是最后一个字符\r\n * 上例中 \r\n * -1 对应的是 字母d\r\n * -2 对应的是倒数第二个 也就是 字母l\r\n * 请尽量用slice 取代 substring\r\n */\r\n```\r\n\r\n#### string.split(separator,limit)\r\n\r\n作用:字符串转数组\r\n\r\n```javascript\r\n/**\r\n * string.split \r\n * 参数介绍:\r\n * separator:分隔符\r\n * limit: 生成数组元素个数 \r\n */\r\nvar str = \"1,2,3\";\r\nvar arr = str.split(\",\",2);\r\nconsole.log(arr); // [\"1\", \"2\"]\r\n```\r\n\r\n#### string.toLowerCase()\r\n\r\n作用:字符串全部转小写\r\n\r\n#### string.toUpperCase()\r\n\r\n作用:字符串全部转大写\r\n\r\n```javascript\r\nvar str = \"Hello WORLD\";\r\nconsole.log(str.toLowerCase()); //hello world\r\nconsole.log(str.toUpperCase()); //HELLO WORLD\r\n```\r\n\r\n## Date\r\n\r\n#### date.toLocaleString()\r\n\r\n作用:转化成本地时间,包含完成的年月日和时分秒。\r\n\r\n#### date.toLocaleDateString()\r\n\r\n作用:转化成本地时间,包含完成的年月日。\r\n\r\n#### date.toLocaleTimeString()\r\n\r\n作用:转化成本地时间,包含完成的时分秒。\r\n\r\n```javascript\r\nvar date = new Date();\r\n\r\nconsole.log(date.toLocaleDateString());// 日期 2020/7/23\r\n \r\nconsole.log(date.getFullYear()); // 2020\r\nconsole.log(date.getMonth()); //6\r\nconsole.log(date.getDate()); // 23\r\n\r\nconsole.log(date.toLocaleTimeString()); //上午10:44:26\r\n\r\nconsole.log(date.getHours()); // 10\r\nconsole.log(date.getMinutes()); // 44\r\nconsole.log(date.getSeconds()); // 26\r\n\r\nconsole.log(date.toLocaleString()); // 2020/7/23 上午10:47:45\r\n\r\nvar date = new Date(2020,01,02,11,11,11); \r\n// 依次为 年,月,日,时,分,秒\r\n// 2020/2/2 上午11:11:11 实际月份 = 设置的+1\r\nconsole.log(date.toLocaleString());\r\n```\r\n\r\n好了,这就是全部内容了,如果觉得对你有所帮助的话就点个赞吧。\r\n\r\n![](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/点赞.jpg)\r\n\r\n么么哒\r\n\r\n![](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/么么哒.png)');
INSERT INTO `article` VALUES (34, '2021-06-13 09:26:38', '2021-06-13 09:26:38', '微信小程序开发——WXML学习', '<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/驯鹿2.png\" alt=\"驯鹿2\"></p>\r\n<h1 id=\"h1--_wxml-\"><a name=\"微信小程序_wxml学习\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>微信小程序_wxml学习</h1><p>wxml里面有很多类似Vue的语法。</p>\r\n<h2 id=\"h2-u6570u636Eu7ED1u5B9A\"><a name=\"数据绑定\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>数据绑定</h2><p>比如数据绑定,在js里面的data里面写。</p>\r\n<pre><code class=\"lang-js\">Page({\r\n /**\r\n * 页面的初始数据\r\n */\r\n data: {\r\n msg:"hello world!",\r\n isShow:true,\r\n arrayObj:["周一","周二","周三"]\r\n },\r\n})\r\n</code></pre>\r\n<p>只要通过差值表达式,就可以将数据渲染到页面里。</p>\r\n<pre><code class=\"lang-html\"><view>{{msg}}</view> //hello world!\r\n</code></pre>\r\n<p>是不是很像Vue里面的new Vue({ }) 里面写个data。:blonde_woman:</p>\r\n<h2 id=\"h2-wx-if-\"><a name=\"wx:if的使用\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>wx:if的使用</h2><p>等效于Vue中的v-if</p>\r\n<pre><code class=\"lang-html\"><view wx:if="{{isShow}}">显示</view>\r\n<view wx:if="{{!isShow}}">不显示</view>\r\n</code></pre>\r\n<p>isShow = true ,猜猜显示哪一个?你脑中的画面和下图一样吗。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917183710267.png\" alt=\"image-20200917183710267\"></p>\r\n<p>同时还有wx:elif 和 wx:else。</p>\r\n<p>today=3,下面的代码,运行后什么样子,脑子里面有画面了吗?</p>\r\n<pre><code class=\"lang-html\"><view wx:if="{{today === 1}}">周一</view>\r\n<view wx:elif="{{today === 2}}">周二</view>\r\n<view wx:elif="{{today === 3}}">周三</view>\r\n<view wx:else>周四</view>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917184527642.png\" alt=\"image-20200917184527642\"></p>\r\n<p>对,没错,就是只显示周三。</p>\r\n<p>Vue里面还有v-show,那么微信小程序里面有没有wx:show呢?答案是,没有!</p>\r\n<p>但是它有一个替代的的属性 hidden,等效于v-show。</p>\r\n<pre><code class=\"lang-html\"><view hidden="{{true}}"> \r\n 测试\r\n</view>\r\n</code></pre>\r\n<p>显然,上面的代码跑后就是什么也不显示,控制台的样式如下图:</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917184847538.png\" alt=\"image-20200917184847538\"></p>\r\n<h2 id=\"h2-wx-for-\"><a name=\"wx:for的使用\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>wx:for的使用</h2><p>wx:for可用于遍历一个数组,通过item访问元素,index访问索引(index和item必须放在差值表达式里面,不然只会被解析成字符串)</p>\r\n<p><strong>arrayObj=[“周一”,”周二”,”周三”]</strong></p>\r\n<pre><code class=\"lang-html\"><view wx:for="{{arrayObj}}" \r\n wx:key="*this" \r\n wx:if="{{ index+1 === today ? true : false }}"\r\n >{{index+1}}. {{item}}\r\n</view>\r\n</code></pre>\r\n<p>遍历后的结果:</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917185331413.png\" alt=\"image-20200917185331413\"></p>\r\n<p> <code>wx:key</code> 是用来指定列表中项目的唯一的标识符,可以指定它为this。保留关键字 <code>this</code> 代表在 for 循环中的 item 本身。</p>\r\n', '蒋伟伟', '微信小程序开发', '微信小程序', '', 'uploads/files/vue_1624069291_135.jpg', '\r\n\r\n![驯鹿2](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/驯鹿2.png)\r\n\r\n# 微信小程序_wxml学习\r\n\r\nwxml里面有很多类似Vue的语法。\r\n\r\n## 数据绑定\r\n\r\n比如数据绑定,在js里面的data里面写。\r\n\r\n```js\r\nPage({\r\n /**\r\n * 页面的初始数据\r\n */\r\n data: {\r\n msg:\"hello world!\",\r\n isShow:true,\r\n arrayObj:[\"周一\",\"周二\",\"周三\"]\r\n },\r\n})\r\n```\r\n\r\n只要通过差值表达式,就可以将数据渲染到页面里。\r\n\r\n```html\r\n<view>{{msg}}</view> //hello world!\r\n```\r\n\r\n是不是很像Vue里面的new Vue({ }) 里面写个data。:blonde_woman:\r\n\r\n## wx:if的使用\r\n\r\n等效于Vue中的v-if\r\n\r\n```html\r\n<view wx:if=\"{{isShow}}\">显示</view>\r\n<view wx:if=\"{{!isShow}}\">不显示</view>\r\n```\r\n\r\nisShow = true ,猜猜显示哪一个?你脑中的画面和下图一样吗。\r\n\r\n\r\n\r\n![image-20200917183710267](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917183710267.png)\r\n\r\n\r\n\r\n同时还有wx:elif 和 wx:else。\r\n\r\ntoday=3,下面的代码,运行后什么样子,脑子里面有画面了吗?\r\n\r\n```html\r\n<view wx:if=\"{{today === 1}}\">周一</view>\r\n<view wx:elif=\"{{today === 2}}\">周二</view>\r\n<view wx:elif=\"{{today === 3}}\">周三</view>\r\n<view wx:else>周四</view>\r\n```\r\n\r\n![image-20200917184527642](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917184527642.png)\r\n\r\n对,没错,就是只显示周三。\r\n\r\nVue里面还有v-show,那么微信小程序里面有没有wx:show呢?答案是,没有!\r\n\r\n但是它有一个替代的的属性 hidden,等效于v-show。\r\n\r\n```html\r\n<view hidden=\"{{true}}\"> \r\n 测试\r\n</view>\r\n```\r\n\r\n显然,上面的代码跑后就是什么也不显示,控制台的样式如下图:\r\n\r\n![image-20200917184847538](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917184847538.png)\r\n\r\n\r\n\r\n## wx:for的使用\r\n\r\nwx:for可用于遍历一个数组,通过item访问元素,index访问索引(index和item必须放在差值表达式里面,不然只会被解析成字符串)\r\n\r\n**arrayObj=[\"周一\",\"周二\",\"周三\"]**\r\n\r\n```html\r\n<view wx:for=\"{{arrayObj}}\" \r\n wx:key=\"*this\" \r\n wx:if=\"{{ index+1 === today ? true : false }}\"\r\n >{{index+1}}. {{item}}\r\n</view>\r\n```\r\n遍历后的结果:\r\n\r\n![image-20200917185331413](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200917185331413.png)\r\n\r\n\r\n\r\n `wx:key` 是用来指定列表中项目的唯一的标识符,可以指定它为this。保留关键字 `this` 代表在 for 循环中的 item 本身。');
INSERT INTO `article` VALUES (35, '2021-06-13 09:30:46', '2021-06-13 09:30:46', '微信小程序开发——组件学习01', '<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/驯鹿.jpg\" alt=\"驯鹿\"></p>\r\n<h1 id=\"h1--_-_001\"><a name=\"微信小程序_组件学习_001\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>微信小程序_组件学习_001</h1><h2 id=\"h2-view-\"><a name=\"view标签\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>view标签</h2><p><strong>等效于html中的div</strong></p>\r\n<p>都是块级元素,独占一行,可设置宽高。</p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>属性</th>\r\n<th>类型</th>\r\n<th>默认值</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td>hover-class</td>\r\n<td>string</td>\r\n<td>none</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>hover的中文意思是悬浮,但在微信小程序里面是按下去的意思。</p>\r\n<p>当用户按下按钮的时候生效。</p>\r\n<h2 id=\"h2-text-\"><a name=\"text标签\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>text标签</h2><p><strong>等效于html中的span标签</strong></p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>属性</th>\r\n<th>类型</th>\r\n<th>默认值</th>\r\n<th>说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td>user-select</td>\r\n<td>boolean</td>\r\n<td>false</td>\r\n<td>文本是否可选,该属性会使文本节点显示为 inline-block</td>\r\n</tr>\r\n<tr>\r\n<td>space</td>\r\n<td>string</td>\r\n<td>无</td>\r\n<td>显示连续空格</td>\r\n</tr>\r\n<tr>\r\n<td>decode</td>\r\n<td>boolean</td>\r\n<td>false</td>\r\n<td>是否解码</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p><strong>user-select</strong>,就是是否允许用户进行选择,选择后会出现对话框(复制,粘贴)。</p>\r\n<p>备注:这个效果只有真机可以测试出来,在微信小程序代码编辑器中无法显示。</p>\r\n<p><strong>space</strong>就是是否解析连续的空格。</p>\r\n<p>众所周知,在html中文字中间有连续的空格的时候,html会解析成一个空格。<a href=\"https://zhidao.baidu.com/question/878136463688978052.html\">详细解析</a></p>\r\n<p>所以,微信小程序,对它进行了补充,允许解析连续空格。</p>\r\n<pre><code class=\"lang-html\"><text>\r\n 文字 中间 有空格\r\n</text>\r\n\r\n<text space="nbsp">\r\n 文字 中间 有空格\r\n</text>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910210605302.png\" alt=\"image-20200910210605302\"></p>\r\n<p>加了 space=”nbsp” 后连续空格就别解析出来了。</p>\r\n<p>推荐space使用属性nbsp,其余的不用去记,用不上。</p>\r\n<p><strong>decode</strong>属性就是表示是否解码</p>\r\n<pre><code class=\"lang-html\"><text decode="true">\r\n 中间&nbsp;空格&lt;;\r\n</text>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910211614969.png\" alt=\"image-20200910211614969\"></p>\r\n<p>可以用来解码 </p>\r\n<pre><code>&nbsp; 和 &lt;等\r\n</code></pre><h2 id=\"h2-navigator-\"><a name=\"navigator标签\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>navigator标签</h2><p><strong>等效于html中的a标签</strong></p>\r\n<p>navigator的中文含义是导航,字面意思,把你导向其他方向。</p>\r\n<p>比如从主页跳转到logs页面</p>\r\n<pre><code class=\"lang-html\"><navigator url="/pages/logs/logs">\r\n 点我跳转到日志\r\n</navigator>\r\n</code></pre>\r\n<p>这种默认打开后是二级页面的形式,左上角有个返回按钮。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910212426249.png\" alt=\"image-20200910212426249\"></p>\r\n<p>如果不想二级页面,想作为一个新的页面,那么就在 open-type里面写上redirect。</p>\r\n<pre><code class=\"lang-html\"><navigator url="/pages/logs/logs" open-type="redirect">\r\n 点我跳转到日志\r\n</navigator>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910212805362.png\" alt=\"image-20200910212805362\"></p>\r\n<p>此时左上角就是一个小屋子图标。</p>\r\n<h2 id=\"h2-icon-\"><a name=\"icon标签\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>icon标签</h2><p>见名知意,用于显示图标。</p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">类型</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">必填</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">type</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">是</td>\r\n<td style=\"text-align:left\">icon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">size</td>\r\n<td style=\"text-align:left\">number/string</td>\r\n<td style=\"text-align:left\">23</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">icon的大小</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">color</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">icon的颜色,同css的color</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<pre><code class=\"lang-html\"><icon type="success" size="60" class="box"></icon>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910220836909.png\" alt=\"image-20200910220836909\"></p>\r\n<p>type的有效值有:success, success_no_circle, info, warn, waiting, cancel, download, search, clear</p>\r\n<h2 id=\"h2-scroll-view-\"><a name=\"scroll-view标签\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>scroll-view标签</h2><p>你可以把它理解成手机端的滚动条,可以横着滚,也可以竖着滚。</p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">必填</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">scroll-x</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">允许横向滚动</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">scroll-y</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">允许纵向滚动</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p><strong>滚动条demo</strong></p>\r\n<pre><code class=\"lang-html\"><scroll-view scroll-x>\r\n <view class="out">\r\n <icon type="success" size="60" class="box"></icon>\r\n <icon type="success_no_circle" size="60" class="box"></icon>\r\n <icon type="info" size="60" class="box"></icon>\r\n <icon type="warn" size="60" class="box"></icon>\r\n <icon type="waiting" size="60" class="box"></icon>\r\n <icon type="cancel" size="60" class="box"></icon>\r\n <icon type="download" size="60" class="box"></icon>\r\n <icon type="search" size="60" class="box"></icon>\r\n <icon type="clear" size="60" class="box"></icon>\r\n </view>\r\n</scroll-view>\r\n</code></pre>\r\n<pre><code class=\"lang-css\">.out{\r\n display: flex;\r\n flex-wrap: nowrap;\r\n}\r\n</code></pre>\r\n', '蒋伟伟', '微信小程序开发', '微信小程序', '', 'uploads/files/cslg_logo_1624069272_527.jpg', '![驯鹿](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/驯鹿.jpg)\r\n\r\n# 微信小程序\\_组件学习\\_001\r\n\r\n\r\n\r\n## view标签\r\n\r\n**等效于html中的div**\r\n\r\n都是块级元素,独占一行,可设置宽高。\r\n\r\n| 属性 | 类型 | 默认值 |\r\n| ----------- | ------ | ------ |\r\n| hover-class | string | none |\r\n\r\nhover的中文意思是悬浮,但在微信小程序里面是按下去的意思。\r\n\r\n当用户按下按钮的时候生效。\r\n\r\n\r\n\r\n\r\n## text标签\r\n\r\n**等效于html中的span标签**\r\n\r\n| 属性 | 类型 | 默认值 | 说明 |\r\n| ----------- | ------- | ------ | --------------------------------------------------- |\r\n| user-select | boolean | false | 文本是否可选,该属性会使文本节点显示为 inline-block |\r\n| space | string | 无 | 显示连续空格 |\r\n| decode | boolean | false | 是否解码 |\r\n\r\n**user-select**,就是是否允许用户进行选择,选择后会出现对话框(复制,粘贴)。\r\n\r\n备注:这个效果只有真机可以测试出来,在微信小程序代码编辑器中无法显示。\r\n\r\n**space**就是是否解析连续的空格。\r\n\r\n众所周知,在html中文字中间有连续的空格的时候,html会解析成一个空格。[详细解析](https://zhidao.baidu.com/question/878136463688978052.html)\r\n\r\n所以,微信小程序,对它进行了补充,允许解析连续空格。\r\n\r\n```html\r\n<text>\r\n 文字 中间 有空格\r\n</text>\r\n\r\n<text space=\"nbsp\">\r\n 文字 中间 有空格\r\n</text>\r\n```\r\n\r\n![image-20200910210605302](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910210605302.png)\r\n\r\n加了 space=\"nbsp\" 后连续空格就别解析出来了。\r\n\r\n推荐space使用属性nbsp,其余的不用去记,用不上。\r\n\r\n**decode**属性就是表示是否解码\r\n\r\n```html\r\n<text decode=\"true\">\r\n 中间 空格<;\r\n</text>\r\n```\r\n\r\n![image-20200910211614969](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910211614969.png)\r\n\r\n可以用来解码 \r\n\r\n```\r\n 和 <等\r\n```\r\n\r\n\r\n\r\n## navigator标签\r\n\r\n**等效于html中的a标签**\r\n\r\nnavigator的中文含义是导航,字面意思,把你导向其他方向。\r\n\r\n比如从主页跳转到logs页面\r\n\r\n```html\r\n<navigator url=\"/pages/logs/logs\">\r\n 点我跳转到日志\r\n</navigator>\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\n这种默认打开后是二级页面的形式,左上角有个返回按钮。\r\n\r\n![image-20200910212426249](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910212426249.png)\r\n\r\n如果不想二级页面,想作为一个新的页面,那么就在 open-type里面写上redirect。\r\n\r\n```html\r\n<navigator url=\"/pages/logs/logs\" open-type=\"redirect\">\r\n 点我跳转到日志\r\n</navigator>\r\n```\r\n\r\n\r\n\r\n![image-20200910212805362](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910212805362.png)\r\n\r\n此时左上角就是一个小屋子图标。\r\n\r\n\r\n\r\n## icon标签\r\n\r\n见名知意,用于显示图标。\r\n\r\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\r\n| :---- | :------------ | :----- | :--- | :----------------------------------------------------------- |\r\n| type | string | | 是 | icon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear |\r\n| size | number/string | 23 | 否 | icon的大小 |\r\n| color | string | | 否 | icon的颜色,同css的color |\r\n\r\n```html\r\n<icon type=\"success\" size=\"60\" class=\"box\"></icon>\r\n```\r\n\r\n\r\n\r\n![image-20200910220836909](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200910220836909.png)\r\n\r\ntype的有效值有:success, success_no_circle, info, warn, waiting, cancel, download, search, clear\r\n\r\n## scroll-view标签\r\n\r\n你可以把它理解成手机端的滚动条,可以横着滚,也可以竖着滚。\r\n\r\n| 属性 | 默认值 | 必填 | 说明 |\r\n| :------- | :----- | :--- | :----------- |\r\n| scroll-x | false | 否 | 允许横向滚动 |\r\n| scroll-y | false | 否 | 允许纵向滚动 |\r\n\r\n**滚动条demo**\r\n\r\n\r\n\r\n\r\n\r\n```html\r\n<scroll-view scroll-x>\r\n <view class=\"out\">\r\n <icon type=\"success\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"success_no_circle\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"info\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"warn\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"waiting\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"cancel\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"download\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"search\" size=\"60\" class=\"box\"></icon>\r\n <icon type=\"clear\" size=\"60\" class=\"box\"></icon>\r\n </view>\r\n</scroll-view>\r\n```\r\n\r\n```css\r\n.out{\r\n display: flex;\r\n flex-wrap: nowrap;\r\n}\r\n```\r\n\r\n');
INSERT INTO `article` VALUES (36, '2021-06-13 09:31:45', '2021-06-13 09:31:45', '微信小程序_基础组件学习02', '<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/远方.jpg\" alt=\"远方\"></p>\r\n<h1 id=\"h1--_-02\"><a name=\"微信小程序_基础组件学习02\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>微信小程序_基础组件学习02</h1><h2 id=\"h2-swiper-\"><a name=\"swiper组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>swiper组件</h2><p>swiper是滑块容器,也就是手机端的轮播图。</p>\r\n<p>swiper组件有两部分组成swiper和swiper-item。</p>\r\n<p>swiper-item需要放在swiper这个容器里面。</p>\r\n<pre><code class=\"lang-html\"><swiper>\r\n <swiper-item class="bannerItem">\r\n </swiper-item>\r\n <swiper-item class="bannerItem">\r\n </swiper-item>\r\n</swiper>\r\n</code></pre>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">类型</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">indicator-dots</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">是否显示面板指示点</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">indicator-color</td>\r\n<td style=\"text-align:left\">color</td>\r\n<td style=\"text-align:left\">rgba(0, 0, 0, .3)</td>\r\n<td style=\"text-align:left\">指示点颜色</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">indicator-active-color</td>\r\n<td style=\"text-align:left\">color</td>\r\n<td style=\"text-align:left\">#000000</td>\r\n<td style=\"text-align:left\">当前选中的指示点颜色</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">autoplay</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">是否自动切换</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">interval</td>\r\n<td style=\"text-align:left\">number</td>\r\n<td style=\"text-align:left\">5000</td>\r\n<td style=\"text-align:left\">自动切换时间间隔</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">circular</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>indicator-dots 用于开启指定点(轮播图必备)</p>\r\n<p>indicator-color用于指示点的颜色,一般设置为rgba(0,0,0,.5)</p>\r\n<p>circular 开启后,当当前在最后一张时,向后滑动会来到第一张。</p>\r\n<h2 id=\"h2-button-\"><a name=\"button组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>button组件</h2><p>只要谈到表单就离不开的按钮组件。</p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">类型</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">必填</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">size</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">default</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">按钮的大小</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">type</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">default</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">按钮的样式类型</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">plain</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">按钮是否镂空,背景色透明</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">disabled</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">是否禁用</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">loading</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">名称前是否带 loading 图标</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">form-type</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">用于 <a href=\"https://developers.weixin.qq.com/miniprogram/dev/component/form.html\">form</a> 组件,点击分别会触发 <a href=\"https://developers.weixin.qq.com/miniprogram/dev/component/form.html\">form</a> 组件的 submit/reset 事件</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">open-type</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">微信开放能力</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>特别提醒:微信小程序里的button是块级标签,也就是说当只有一个button时候,它会独占一行。</p>\r\n<pre><code class=\"lang-html\"><button type="primary">按钮</button>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916205254004.png\" alt=\"image-20200916205254004\"></p>\r\n<p><strong>type的主要值</strong></p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">值</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">primary</td>\r\n<td style=\"text-align:left\">绿色</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">default</td>\r\n<td style=\"text-align:left\">白色</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">warn</td>\r\n<td style=\"text-align:left\">红色</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<h2 id=\"h2-radio-group-radio-\"><a name=\"radio-group和radio组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>radio-group和radio组件</h2><p>单选组件, 只能选择radio-group中的一个。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916205829837.png\" alt=\"image-20200916205829837\"></p>\r\n<pre><code class=\"lang-html\"><radio-group>\r\n <radio value="0">男</radio>\r\n <radio value="1">女</radio>\r\n</radio-group>\r\n</code></pre>\r\n<h2 id=\"h2-check-group-checkbox-\"><a name=\"check-group和checkbox组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>check-group和checkbox组件</h2><p>复选组件,可以选择多个。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916210049884.png\" alt=\"image-20200916210049884\"></p>\r\n<pre><code class=\"lang-html\"><view>\r\n 爱好:\r\n <checkbox-group>\r\n <checkbox value="0">篮球</checkbox>\r\n <checkbox value="1">足球</checkbox>\r\n <checkbox value="2">羽毛球</checkbox>\r\n </checkbox-group>\r\n</view>\r\n</code></pre>\r\n<h2 id=\"h2-input-\"><a name=\"input组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>input组件</h2><p>input组件作为输入框,form表单中不可或缺的重要元素。</p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">类型</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">必填</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">value</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">是</td>\r\n<td style=\"text-align:left\">输入框的初始内容</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">type</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">text</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">input 的类型</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">password</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">是否是密码类型</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">placeholder</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">是</td>\r\n<td style=\"text-align:left\">输入框为空时占位符</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">placeholder-style</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">是</td>\r\n<td style=\"text-align:left\">指定 placeholder 的样式</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">placeholder-class</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">input-placeholder</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">指定 placeholder 的样式类</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">disabled</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">是否禁用</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">maxlength</td>\r\n<td style=\"text-align:left\">number</td>\r\n<td style=\"text-align:left\">140</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">最大输入长度,设置为 -1 的时候不限制最大长度</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>input表单有一个缺点,那就是它默认没有外边框。得通过自己写css来添加外边框。</p>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916214015168.png\" alt=\"image-20200916214015168\"></p>\r\n<pre><code class=\"lang-html\"><form action="#">\r\n <input class="viewIpt" placeholder="请输入用户名" />\r\n <input class="viewIpt" placeholder="请输入密码" password="true"/>\r\n</form>\r\n</code></pre>\r\n<pre><code class=\"lang-css\">.viewIpt{\r\n border: 1px solid black;\r\n border-radius: 4px;\r\n margin: 8px;\r\n padding: 4px;\r\n}\r\n</code></pre>\r\n<h2 id=\"h2-switch-\"><a name=\"switch组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>switch组件</h2><p>switch组件就是滑块,自带很漂亮的动画。</p>\r\n<h2 id=\"h2-progress-\"><a name=\"progress组件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>progress组件</h2><table>\r\n<thead>\r\n<tr>\r\n<th style=\"text-align:left\">属性</th>\r\n<th style=\"text-align:left\">类型</th>\r\n<th style=\"text-align:left\">默认值</th>\r\n<th style=\"text-align:left\">必填</th>\r\n<th style=\"text-align:left\">说明</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"text-align:left\">percent</td>\r\n<td style=\"text-align:left\">number</td>\r\n<td style=\"text-align:left\"></td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">百分比0~100</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">show-info</td>\r\n<td style=\"text-align:left\">boolean</td>\r\n<td style=\"text-align:left\">false</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">在进度条右侧显示百分比</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">border-radius</td>\r\n<td style=\"text-align:left\">number/string</td>\r\n<td style=\"text-align:left\">0</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">圆角大小</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">font-size</td>\r\n<td style=\"text-align:left\">number/string</td>\r\n<td style=\"text-align:left\">16</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">右侧百分比字体大小</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">stroke-width</td>\r\n<td style=\"text-align:left\">number/string</td>\r\n<td style=\"text-align:left\">6</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">进度条线的宽度</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">color</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">#09BB07</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">进度条颜色(请使用activeColor)</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align:left\">activeColor</td>\r\n<td style=\"text-align:left\">string</td>\r\n<td style=\"text-align:left\">#09BB07</td>\r\n<td style=\"text-align:left\">否</td>\r\n<td style=\"text-align:left\">已选择的进度条的颜色</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>进度条,这种东西可以大大提高用户的使用体验。</p>\r\n<pre><code class=\"lang-html\"><view>\r\n <progress percent="100" active="true" show-info="true" border-radius="10">\r\n </progress>\r\n</view>\r\n</code></pre>\r\n<p><img src=\"http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916214741121.png\" alt=\"image-20200916214741121\"></p>\r\n', '蒋伟伟', '微信小程序开发', '微信小程序', '', 'uploads/files/cslg_logo_1624069258_529.jpg', '![远方](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/远方.jpg)\r\n\r\n# 微信小程序_基础组件学习02\r\n\r\n## swiper组件\r\n\r\nswiper是滑块容器,也就是手机端的轮播图。\r\n\r\n\r\n\r\nswiper组件有两部分组成swiper和swiper-item。\r\n\r\nswiper-item需要放在swiper这个容器里面。\r\n\r\n```html\r\n<swiper>\r\n <swiper-item class=\"bannerItem\">\r\n </swiper-item>\r\n <swiper-item class=\"bannerItem\">\r\n </swiper-item>\r\n</swiper>\r\n```\r\n\r\n| 属性 | 类型 | 默认值 | 说明 |\r\n| :--------------------- | :------ | :---------------- | :------------------- |\r\n| indicator-dots | boolean | false | 是否显示面板指示点 |\r\n| indicator-color | color | rgba(0, 0, 0, .3) | 指示点颜色 |\r\n| indicator-active-color | color | #000000 | 当前选中的指示点颜色 |\r\n| autoplay | boolean | false | 是否自动切换 |\r\n| interval | number | 5000 | 自动切换时间间隔 |\r\n| circular | boolean | false | 否 |\r\n\r\nindicator-dots 用于开启指定点(轮播图必备)\r\n\r\nindicator-color用于指示点的颜色,一般设置为rgba(0,0,0,.5)\r\n\r\ncircular 开启后,当当前在最后一张时,向后滑动会来到第一张。\r\n\r\n\r\n\r\n## button组件\r\n\r\n只要谈到表单就离不开的按钮组件。\r\n\r\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\r\n| :-------- | :------ | :------ | :--- | :----------------------------------------------------------- |\r\n| size | string | default | 否 | 按钮的大小 |\r\n| type | string | default | 否 | 按钮的样式类型 |\r\n| plain | boolean | false | 否 | 按钮是否镂空,背景色透明 |\r\n| disabled | boolean | false | 否 | 是否禁用 |\r\n| loading | boolean | false | 否 | 名称前是否带 loading 图标 |\r\n| form-type | string | | 否 | 用于 [form](https://developers.weixin.qq.com/miniprogram/dev/component/form.html) 组件,点击分别会触发 [form](https://developers.weixin.qq.com/miniprogram/dev/component/form.html) 组件的 submit/reset 事件 |\r\n| open-type | string | | 否 | 微信开放能力 |\r\n\r\n特别提醒:微信小程序里的button是块级标签,也就是说当只有一个button时候,它会独占一行。\r\n\r\n```html\r\n<button type=\"primary\">按钮</button>\r\n```\r\n\r\n\r\n\r\n![image-20200916205254004](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916205254004.png)\r\n\r\n**type的主要值**\r\n\r\n| 值 | 说明 |\r\n| :------ | :--- |\r\n| primary | 绿色 |\r\n| default | 白色 |\r\n| warn | 红色 |\r\n\r\n\r\n\r\n\r\n\r\n## radio-group和radio组件\r\n\r\n单选组件, 只能选择radio-group中的一个。\r\n\r\n![image-20200916205829837](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916205829837.png)\r\n\r\n\r\n\r\n```html\r\n<radio-group>\r\n <radio value=\"0\">男</radio>\r\n <radio value=\"1\">女</radio>\r\n</radio-group>\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## check-group和checkbox组件\r\n\r\n复选组件,可以选择多个。\r\n\r\n![image-20200916210049884](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916210049884.png)\r\n\r\n```html\r\n<view>\r\n 爱好:\r\n <checkbox-group>\r\n <checkbox value=\"0\">篮球</checkbox>\r\n <checkbox value=\"1\">足球</checkbox>\r\n <checkbox value=\"2\">羽毛球</checkbox>\r\n </checkbox-group>\r\n</view>\r\n```\r\n\r\n\r\n\r\n## input组件\r\n\r\ninput组件作为输入框,form表单中不可或缺的重要元素。\r\n\r\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\r\n| :---------------- | :------ | :---------------- | :--- | :------------------------------------------- |\r\n| value | string | | 是 | 输入框的初始内容 |\r\n| type | string | text | 否 | input 的类型 |\r\n| password | boolean | false | 否 | 是否是密码类型 |\r\n| placeholder | string | | 是 | 输入框为空时占位符 |\r\n| placeholder-style | string | | 是 | 指定 placeholder 的样式 |\r\n| placeholder-class | string | input-placeholder | 否 | 指定 placeholder 的样式类 |\r\n| disabled | boolean | false | 否 | 是否禁用 |\r\n| maxlength | number | 140 | 否 | 最大输入长度,设置为 -1 的时候不限制最大长度 |\r\n\r\ninput表单有一个缺点,那就是它默认没有外边框。得通过自己写css来添加外边框。\r\n\r\n![image-20200916214015168](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916214015168.png)\r\n\r\n```html\r\n<form action=\"#\">\r\n <input class=\"viewIpt\" placeholder=\"请输入用户名\" />\r\n <input class=\"viewIpt\" placeholder=\"请输入密码\" password=\"true\"/>\r\n</form>\r\n```\r\n\r\n```css\r\n.viewIpt{\r\n border: 1px solid black;\r\n border-radius: 4px;\r\n margin: 8px;\r\n padding: 4px;\r\n}\r\n```\r\n\r\n\r\n\r\n## switch组件\r\n\r\nswitch组件就是滑块,自带很漂亮的动画。\r\n\r\n\r\n\r\n\r\n\r\n## progress组件\r\n\r\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\r\n| :------------ | :------------ | :------ | :--- | :------------------------------ |\r\n| percent | number | | 否 | 百分比0~100 |\r\n| show-info | boolean | false | 否 | 在进度条右侧显示百分比 |\r\n| border-radius | number/string | 0 | 否 | 圆角大小 |\r\n| font-size | number/string | 16 | 否 | 右侧百分比字体大小 |\r\n| stroke-width | number/string | 6 | 否 | 进度条线的宽度 |\r\n| color | string | #09BB07 | 否 | 进度条颜色(请使用activeColor) |\r\n| activeColor | string | #09BB07 | 否 | 已选择的进度条的颜色 |\r\n\r\n进度条,这种东西可以大大提高用户的使用体验。\r\n\r\n```html\r\n<view>\r\n <progress percent=\"100\" active=\"true\" show-info=\"true\" border-radius=\"10\">\r\n </progress>\r\n</view>\r\n```\r\n\r\n![image-20200916214741121](http://imgbed-xia-2.oss-cn-hangzhou.aliyuncs.com/img/image-20200916214741121.png)\r\n\r\n');
-- ----------------------------
-- Table structure for category
-- ----------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime(0) NULL DEFAULT NULL COMMENT '编辑时间',
`category` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类内容',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of category
-- ----------------------------
INSERT INTO `category` VALUES (1, '2021-05-19 08:12:11', '2021-05-19 08:12:13', '程序人生');
INSERT INTO `category` VALUES (2, '2021-05-19 08:12:11', '2021-05-19 08:12:13', 'Java程序设计');
INSERT INTO `category` VALUES (4, '2021-05-19 08:12:11', '2021-05-19 08:12:13', 'PHP程序设计');
INSERT INTO `category` VALUES (5, '2021-05-19 08:12:11', '2021-05-19 08:12:13', 'Python程序设计');
INSERT INTO `category` VALUES (8, '2021-05-19 09:32:00', '2021-05-19 09:32:00', '代码如诗');
INSERT INTO `category` VALUES (10, '2021-06-13 04:53:04', '2021-06-13 09:25:05', '编程工具');
INSERT INTO `category` VALUES (11, '2021-06-13 09:25:12', '2021-06-13 09:25:12', '微信小程序开发');
INSERT INTO `category` VALUES (12, '2021-06-13 09:25:21', '2021-06-13 09:25:21', 'JavaScript开发');
-- ----------------------------
-- Table structure for comment
-- ----------------------------
DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '评论id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`edit_time` datetime(0) NULL DEFAULT NULL COMMENT '最后一次编辑时间',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '内容',
`status` tinyint(4) UNSIGNED NULL DEFAULT NULL COMMENT '审核状态(0=审核中,1=审核通过,2=审核不通过)',
`uid` int(11) UNSIGNED NULL DEFAULT NULL COMMENT '评论-用户id',
`aid` int(11) UNSIGNED NULL DEFAULT NULL COMMENT '评论-文章id',
`comment_id` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '评论-评论这条评论的id (如果为Null, 则为顶级评论)',
`level` int(10) NULL DEFAULT NULL COMMENT '评论的深度',
PRIMARY KEY (`id`) USING BTREE,
INDEX `uid`(`uid`) USING BTREE,
INDEX `aid`(`aid`) USING BTREE,
INDEX `comment_id`(`comment_id`) USING BTREE,
CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`aid`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `comment_ibfk_3` FOREIGN KEY (`comment_id`) REFERENCES `comment` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 134 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of comment
-- ----------------------------
INSERT INTO `comment` VALUES (1, '2021-05-18 09:56:03', '2021-05-18 09:56:05', '博主,文章写的真好', 1, 1, 1, NULL, 1);
INSERT INTO `comment` VALUES (4, '2021-05-18 11:17:08', '2021-05-18 11:18:56', '这是一条测试评论', 1, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (6, '2021-05-18 09:11:50', '2021-05-18 10:35:05', '可以可以', 1, 3, 21, NULL, 1);
INSERT INTO `comment` VALUES (7, '2021-05-18 09:11:55', '2021-05-18 09:11:55', '可以可以', 0, 3, 21, NULL, 1);
INSERT INTO `comment` VALUES (8, '2021-05-18 09:13:01', '2021-05-18 09:13:01', '测试', 0, 3, 21, NULL, 1);
INSERT INTO `comment` VALUES (9, '2021-05-18 09:13:46', '2021-05-18 09:13:46', '测试', 0, 3, 21, NULL, 1);
INSERT INTO `comment` VALUES (11, '2021-05-18 10:20:52', '2021-05-18 10:20:52', '测试0', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (12, '2021-05-18 10:20:52', '2021-05-18 10:20:52', '测试1', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (13, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试2', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (14, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试3', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (15, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试4', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (16, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试5', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (17, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试6', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (18, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试7', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (19, '2021-05-18 10:20:53', '2021-05-18 10:20:53', '测试8', 0, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (20, '2021-05-18 10:20:53', '2021-05-18 10:34:37', '测试9', 2, 2, 1, NULL, 1);
INSERT INTO `comment` VALUES (111, '2021-05-18 10:24:44', '2021-05-18 10:29:02', '谢谢博主分享', 1, 3, 21, NULL, 1);
INSERT INTO `comment` VALUES (112, '2021-05-18 10:39:25', '2021-05-18 10:39:25', '1', 0, 3, 1, NULL, 1);
INSERT INTO `comment` VALUES (113, '2021-05-18 10:39:43', '2021-05-18 10:39:43', '11', 0, 3, 1, NULL, 1);
INSERT INTO `comment` VALUES (114, '2021-05-19 07:57:13', '2021-05-19 07:57:13', '是的,我也是一条测试评论', 0, 3, 1, 4, 2);
INSERT INTO `comment` VALUES (119, '2021-05-19 09:59:25', '2021-05-19 09:59:42', '总结的很全面,收获很多。', 1, 3, 29, NULL, 1);
INSERT INTO `comment` VALUES (120, '2021-05-19 10:00:16', '2021-05-19 10:00:23', '嗯嗯,确实不错', 1, 1, 29, 119, 2);
INSERT INTO `comment` VALUES (121, '2021-05-20 10:53:13', '2021-05-20 10:53:35', '博主写的真不错', 1, 3, 31, NULL, 1);
INSERT INTO `comment` VALUES (122, '2021-05-20 10:53:52', '2021-05-20 10:54:00', '确实确实', 1, 3, 31, 121, 2);
INSERT INTO `comment` VALUES (124, '2021-05-20 11:20:22', '2021-05-20 11:20:40', '测试评论功能', 1, 3, 26, NULL, 1);
INSERT INTO `comment` VALUES (125, '2021-05-20 11:20:56', '2021-05-20 11:21:05', '好的', 1, 3, 26, 124, 2);
INSERT INTO `comment` VALUES (126, '2021-05-27 10:27:10', '2021-05-27 10:27:43', '测试评论', 1, 3, 31, NULL, 1);
INSERT INTO `comment` VALUES (127, '2021-05-27 10:27:59', '2021-06-13 10:32:53', 'hello', 0, 3, 31, 126, 2);
INSERT INTO `comment` VALUES (128, '2021-06-13 03:39:04', '2021-06-13 03:39:40', '嗯嗯', 1, 30, 26, 124, 2);
INSERT INTO `comment` VALUES (129, '2021-06-13 03:40:41', '2021-06-13 04:27:00', '宝藏博主,关注了。', 1, 30, 26, NULL, 1);
INSERT INTO `comment` VALUES (130, '2021-06-19 10:22:15', '2021-06-19 10:22:35', '博主写的不错', 1, 3, 36, NULL, 1);
INSERT INTO `comment` VALUES (131, '2021-06-19 10:22:41', '2021-06-19 10:22:47', '确实不错', 1, 3, 36, 130, 2);
INSERT INTO `comment` VALUES (132, '2021-06-19 10:23:05', '2021-06-19 10:23:10', '期待博主的更多作品', 1, 3, 35, NULL, 1);
INSERT INTO `comment` VALUES (133, '2021-06-19 10:23:32', '2021-06-19 10:23:40', '评论区打卡留言', 1, 3, 35, NULL, 1);
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户名',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '密码(经过hash加密)',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '邮箱',
`gender` tinyint(4) UNSIGNED NULL DEFAULT 0 COMMENT '性别 (0=男,1=女,2=保密)',
`signature` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '个性签名',
`point` int(255) UNSIGNED NULL DEFAULT 0 COMMENT '积分',
`head_pic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户头像',
`user_type` tinyint(4) UNSIGNED NULL DEFAULT 1 COMMENT '用户权限等级(0=管理员,1=普通用户)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'tom', '202cb962ac59075b964b07152d234b70', '[email protected]', 0, '中文 修改签名 111', 10, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (2, 'jack', '202cb962ac59075b111117152d234b70', '', 1, '', 10, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (3, 'admin', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '', 10, 'uploads/admin.jpg', 0);
INSERT INTO `user` VALUES (23, 'testi', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 101111, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (30, 'test0', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (31, 'test1', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (32, 'test2', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 999, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (33, 'test3', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (34, 'test4', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (35, 'test5', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/vue.jpg', 0);
INSERT INTO `user` VALUES (36, 'test6', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (37, 'test7', '202cb962ac59075b964b07152d234b70', '[email protected]', 1, '个性签名', 0, 'uploads/example.png', 0);
INSERT INTO `user` VALUES (38, 'username_super', 'b3ddbc502e307665f346cbd6e52cc10d', '[email protected]', 0, '11212', 10, 'uploads/vue.jpg', 0);
INSERT INTO `user` VALUES (39, 'user', '202cb962ac59075b964b07152d234b70', '[email protected]', 0, '签名', 0, 'uploads/example.png', 1);
INSERT INTO `user` VALUES (42, 'Z09418208', '202cb962ac59075b964b07152d234b70', '[email protected]', 0, '签名', 0, 'uploads/cslg_logo-removebg-preview_1623570183_836.png', 1);
INSERT INTO `user` VALUES (43, '蒋伟伟', '202cb962ac59075b964b07152d234b70', '[email protected]', 0, '签名', 10, 'uploads/路飞_1623570963_504.jpeg', 0);
INSERT INTO `user` VALUES (44, 'hello_world', '202cb962ac59075b964b07152d234b70', '[email protected]', 0, '前面', 0, 'uploads/example.png', 1);
SET FOREIGN_KEY_CHECKS = 1;