【Stepping-Stone】失败是成功他妈
这篇文章主要是记录工作过程中遇到的一些问题,以及解决方案,本来想单独开一个仓库用来记录,后来想想好像也没必要,就用一篇长文章的方式来记录吧,后面会根据时间来作为索引。
2021-05-17
JSON.stringify 和 qs.stringify 的区别
qs可以通过npm install qs命令进行安装,是一个npm仓库管理的包。qs.stringify()主要功能是将对象序列化成URL的形式,以&进行拼接。例如:
1 | var a = {name: 'jing', age: 18} |
而JSON是正常类型的JSON,
1 | JSON.stringify(a) |
2021-05-18
JS中查看数据类型的方法
JS中的数据类型
JS是一种弱类型语言,一般说来,JS有7种数据类型,包括三种基本类型:Number、String、Boolean,两种引用数据类型:Object、Array,以及两种特殊数据类型:null、undefined,es6中又新增了一种叫Symbol的数据类型,他的最大特点是唯一性,具体不展开说了,详情参考这个链接:关于es6的Symbol数据类型。
如何判断JS中的数据类型
不同类型的值所代表的布尔值情况:
· 空字符串: false
· null: false
· undefined: false
· 0: false
· NaN: false
除了上面的情况,其他情况都是true
方法一:使用typeOf
1 | typeof('string') // string |
其中,数组类型和对象类型统一被划分成了对象,所以如果像区分数组和对象的话,需要用方法二和三。
其中,比较意外的是null,要记住他是一个空对象.
方法二:使用instanceof
instanceof只能用来判断数组或对象,其中数组类型的也是对象,具体用法:
1 | let arr = [1,2,3,4] |
方法三:使用constructor
1 | let arr = [1,2,3,4] |
方法四:使用toString方法,此方法较佳
1 | let arr = [1,2,3,4] |
利用上面的方法就可以封装一个函数,判断结果是是那个从而返回不同的结果。
2021-05-21
VUE+element 组件中回调函数传递额外参数
问题是这样的,我想在组件中自带的回调函数函数中传递我自己的参数,但是发现用直接绑定的方式没办法传递,经过网上查找,发现可以用箭头函数的方式,即箭头函数里传原生参数,在箭头函数内调用的函数加入自己的参数。
示例代码:
1 | <!-- 这里的value是回调函数自带的参数,代表了输入框的值,后面的两个参数是自己加的 --> |
2021-05-23
textarea 换行输入的问题
项目中又一个需求,是这样的:
- 将数组中的字符串分行放到textarea中;2. 将textarea中的数据按行保存到一个数组中,即每一行都是一个数组元素
通过将textarea中的数据打印出来查看,发现数据是保留了换行信息的,所以解决这个问题的关键是用正则表达式,/[(\r\n)\r\n]+/这个正则表达式会按照换行或者回车进行识别,那么就好办了。详情看下面代码:
1 | // 假设从textarea中获取回来的数据是这个 |
这样就完成了,同理,要将数组换行显示到textarea组件中也只需要res.join(/[(\r\n)\r\n]+/)即可。
之前对正则表达式没什么好感,虽然也会经常用到,但就是提不起兴趣,解决完了这个问题之后,感觉要去研究一下了,最好结合自己的理解写一篇文章出来。
2021-06-04
判断对象是否是空对象的问题
最近真的是忙到爆炸,攒了好几个问题在笔记本上,没时间来整理,这会抽点空赶紧写一下。
问题背景是在实际应用中经常会用到对象和数组判空,如果不进行判空的话可能会导致报错,但是对象不像数组可以直接.length===0就很麻烦,有几种方法这里比较一下吧
· 方法一 将json对象转化为json字符串,再判断该字符串是否为”{}” – 此方法写的代码较长,难看
1 |
|
· 方法二 写个函数用遍历的方法,如果有元素返回true,没有返回false – 此方法还可以,写在util-tools.js里直接引用过去用就行了
1 |
|
· 方法三 使用Object.getOwnPropertyNames()方法
此方法会获取到对象中的属性名,并将其存储到一个数组中,然后再去判断这个数组的长度是否为零就行了,代码也太长,放弃
1 |
|
· 方法四 使用ES6的Object.keys()方法
跟方法三类似,也是返回一个数组,好处是函数名短了不少,
1 |
|
2021-06-05
vue项目中换行会被解析成空格
这个也是实际项目中用到的,背景是后端会返回给我一个字符串,这个字符串里有各种转义符号,如果想让这些转义符号按照html的格式显示出来只需要在标签上加一个v-html就好了,但是同时又发现只加v-html,他会将换行符比如\n等解析为空格,后来通过查询,发现解决这个问题也很简单,只需要借助css中的一个属性,那就是:
1 | white-space: pre-wrap |
同理,如果不想看到换行的话,就可以用
1 | white-space: no-wrap |
2021-07-02
项目中需要将数据转成csv文件并下载
后端偷懒,前端遭殃。需求是将后端传过来的数据整理好格式,做成csv表格,然后下载。这个需求其实不难,首先来了解一下csv格式:
csv文件是一个纯文本文件,用逗号和换行分割,其中
","表示换列,"\n"表示换行,每一个单元格加一个"\t"制表符是为了防止Excel自动将长数字转换为科学技术法等样式。
所以最后实际上是将数据拼接成一个字符串,然后将字符串作为csv文件下载。过程是这样的:
- 准备表头和内容
1
2
3
4let jsonData = {
tHeader: ["姓名", "年龄"],
tRows: [],
} - 然后将数据按照需求都push进这两个数组中,比如现在在
tHeader中,每一个单元格就是数组的一个元素,
定义一个mainStr=[]用来拼合表头和内容1
2
3
mainStr.push(jsonData.tHeader.join("\t,")) // 不要忘了逗号 - 一般来说
tRows需要通过遍历数据产生 - 最后得到的
mainStr是一个数组,里边包含了每一行元素,此时只需要1
2
3
const merged = mainStr.join("\n") - 导出操作
1
2
3
4
5
6
7
8
9
10
11
12
// encodeURIComponent解决中文乱码
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(merged)
// 通过创建a标签实现
let link = document.createElement('a')
link.href = uri
// 对下载的文件命名,可以用模板字符串拼接
link.download = `文件名${this.name}.csv`
document.body.appendChild(link)
// 模拟点击
link.click()