JS 中有许多常见的函数,我们可能每天都在使用它们,但是却不知道它们的一些额外功能。JSON.stringify 就是这样的一个函数,今天就来看下它的特殊用法。
JSON.stringify 方法接收一个变量,并将它转换成 JSON 表示形式。
const boy = {
name: 'John',
age: 23
};
JSON.stringify(boy);
// {"name":"John","age":23}
JSON 就是纯字符串,它本质上是 JS 的一个子集,所以并不是所有的 JS 对象都能转换为 JSON:
const boy = {
name: 'John',
age: 23,
hobbies: new Map([[0, 'coding'], [1, 'earn money']])
}
JSON.stringify(boy)
// {"name":"John","age":23,"hobbies":{}}
上面的例子中 Map 对象就会被忽略并转换为普通对象。而如果属性是函数的话则这个属性就会被忽略,感兴趣的同学可以试下。
JSON.stringify 可以接收第二个参数,可以称为 replacer 替换器。
你可以传入一个字符串数组,这个数组中具有的属性才会被转换,就像一个白名单。
const boy = {
name: 'John',
age: 23
}
JSON.stringify(boy, ['name'])
// {"name":"John"}
我们可以利用这个特性,只转换需要转换的属性,过滤掉如很长的数组、错误对象等。
这个 replacer 参数还可以接收一个函数。这个函数会遍历整个对象,并将键和值传入,让你决定该如何替换它们。
const boy = {
name: 'John',
age: 23,
hobbies: new Map([[0, 'coding'], [1, 'earn money']])
}
JSON.stringify(boy, (key, value) => {
if (value instanceof Map) {
return [...value.values()]
}
return value
})
// {"name":"John","age":23,"hobbies":["coding","earn money"]}
而如果你返回了 undefined (返回 null 不行),就将这个属性移除了:
JSON.stringify(boy, (key, value) => {
if (typeof value === 'string') {
return undefined
}
return value
})
// {"age":23,"hobbies":{}}
第三个参数 space 控制了转换后的 JSON 串的间距。
如果参数是数字,则以该数字个数的空格进行缩进:
JSON.stringify(boy, null, 2)
// {
// "name": "John",
// "age": 23,
// "hobbies": {}
// }
而如果参数是字符串,则以该字符串进行缩进:
JSON.stringify(boy, null, '--')
// {
// --"name": "John",
// --"age": 23,
// --"hobbies": {}
// }
如果我们要转换的对象具有一个 toJSON 方法,那么就可以定制自己被序列化的过程。你甚至可以返回一个新的对象。
const boy = {
name: 'John',
age: 23,
hobbies: new Map([[0, 'coding'], [1, 'earn money']]),
toJSON() {
return {
name: `${this.name} (${this.age})`,
favorite: this.hobbies.get(0)
}
}
}
JSON.stringify(boy)
// {"name":"John (23)","favorite":"coding"}
是不是很有趣?有时候仔细看一些文档还是很有用的~
分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升
这是我自己做的一个左边点击对应的标题,右边显示相应代码的一个功能。代码显示这里用的是vue-codemirror插件。data中cmOptions的配置,这里我写的比较简单,具体的配置项,可以去查官方文档
ref 加在普通的元素上,用 this.$refs.name 获取到的是dom元素;ref 加在子组件上,用 this.$refs.name 获取到的是子组件实例,父组件可以使用子组件的所有方法(在上篇博客已介绍);如何利用 v-for 和 ref 获取一组数组或者dom 节点
provide和inject是成对出现的,用于父组件向子孙组件传递数据,provide在父组件中返回要传给下级的数据,inject在需要使用这个数据的子辈组件或者孙辈等下级组件中注入数据。
Mutation Observer API 用来监视 DOM 变动。比如节点的增减、属性的变动、文本内容的变动。MutationObserver使用observe方法进行监听指定的元素节点变化
MutationObserver概览MutationObserver interface可以用来监测DOM树的变化。MutationObserver 是旧的DOM3事件规范Mutation Events特性的一个替换。
在JavaScript中document.write()函数可以向文档写入HTML表达式或JavaScript代码,用法“document.write(exp1,exp2,exp3,....)”,该函数可接受任何多个参数,并将其写入文档中。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!