美文网首页优美编程
qs-日常实用篇

qs-日常实用篇

作者: 小遁哥 | 来源:发表于2020-02-02 16:34 被阅读0次

面试官:qsstringify第二个参数都支持哪些属性?

如果您只是用简单的用stringifyparse ,不妨看看下面的内容!

qs官网

基本操作

{ encode: false }

默认是编码的

qs.stringify({"a b":'出门带口罩'});
///"a%20b=%E5%87%BA%E9%97%A8%E5%B8%A6%E5%8F%A3%E7%BD%A9"

不编码时:

qs.stringify({"a b":'出门带口罩'},{encode:false});
///"a b=出门带口罩"

只编码值:

qs.stringify({"a b":'出门带口罩'},{encodeValuesOnly:true});
// "a b=%E5%87%BA%E9%97%A8%E5%B8%A6%E5%8F%A3%E7%BD%A9"

undefined的处理

默认会忽略值为undefined的key

qs.stringify({a:undefined});
// ""

可以通过filter自定义行为

    qs.stringify(
      { a: undefined },
      {
        filter: (key, value) => {
          return value === undefined ? "undefined" : value;
        },
      },
    );

// "a=undefined"

null的处理

默认行为

编码

qs.stringify({ a: null, b: '' });
// "a=&b="

解码

qs.parse("a=&b=");
// {a: "", b: ""}

区分 null''

编码

qs.stringify({ a: null, b: '' }, { strictNullHandling: true })
"a&b="

解码

qs.parse('a&b=', { strictNullHandling: true })
// {a: null, b: ""}

跳过null

qs.stringify({ a: 'b', c: null}, { skipNulls: true })
// "a=b"

空对象和空数组会忽略

    qs.stringify({ a: [] });
    qs.stringify({ a: {} });
    qs.stringify({ a: [{}] });
    qs.stringify({ a: { b: [] } });
    qs.stringify({ a: { b: {} } });
// ""

用filter过滤

是函数时,返回undefined 会被忽略

    qs.stringify(
      { a: 1, b: 2 },
      {
        filter: (key, value) => {
          if (key === "a") {
            return;
          }
          return value;
        },
      },
    );
// b=2


是数组时,保留指定的key

qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] });
"a=b&e=f"

对数组的处理

默认行为

qs.stringify({ a: ['b', 'c', 'd'] },{encodeValuesOnly:true});
// 'a[0]=b&a[1]=c&a[2]=d'

生成表单提交时的样子

qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
"a=b&a=c&a=d"
qs.stringify({ a: ['b', 'c','d'] }, { arrayFormat: 'repeat' })
"a=b&a=c&a=d"

对?的处理

stringify 生成?号

qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true })
// "?a=b&c=d"

parse 忽略?号

qs.parse("?a=b&c=d",{ ignoreQueryPrefix: true })
//{a: "b", c: "d"}

对原生属性的处理

默认会被忽略

qs.parse('a[hasOwnProperty]=b')
//{}

不继承原型链

qs.parse('a[hasOwnProperty]=b', { plainObjects: true })
image.png

覆盖原生属性

 qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true })
image.png

encoderdecoder

自定义编码

    qs.stringify(
      { a: { b: "c" } },
      {
        encoder: function(str, defaultEncoder, charset, type) {
          if (type === "key") {
            return; // Encoded key
          } else if (type === "value") {
            return; // Encoded value
          }
        },
      },
    );

自定义解码

    qs.parse("x=z", {
      decoder: function(str, defaultEncoder, charset, type) {
        if (type === "key") {
          return; // Decoded key
        } else if (type === "value") {
          return; // Decoded value
        }
      },
    });

基本规则

对嵌套层数的限制

默认5层

qs.parse('a[b][c][d][e][f][g][h][i]=j')
image.png

对参数个数的限制

默认1000 个

qs.parse('a=b&c=d', { parameterLimit: 1 });
// {a: "b"}

结语

qs 对数组和对象提供很多形式的处理方式,例如

qs.parse('a.b=c', { allowDots: true });
//  { a: { b: 'c' } }
qs.parse('a[1]=b', { arrayLimit: 0 })
//a: {1: "b"}

在字符集上的设定

qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' })

不一一列举,如有需要,建议仔细看一下官网,省时省力!

相关文章

  • qs-日常实用篇

    面试官:qs 的stringify第二个参数都支持哪些属性? 如果您只是用简单的用stringify和parse ...

  • iOS实用篇:无限循环滚动的TableView

    iOS实用篇:无限循环滚动的TableView iOS实用篇:无限循环滚动的TableView

  • 3月复盘 - 草稿

    本月输出 随手拍:40张 头条文案:24条 丙烯画:3幅 文章:4篇 本月输入: 读书:《那些怪诞又实用的日常心理...

  • 日常实用技能

    1. Ubuntu下硬盘加载故障 解决方法: 在终端输入如下命令,查看分区挂载情况 修复挂载错误的相应的分区,如提...

  • 陶瓷碗如何去油渍?

    今天koenitz小编给大家分享一篇实用性比较高的文章——陶瓷碗如何去油渍? 陶瓷碗在日常家庭中很普遍,选用陶瓷碗...

  • 生活必备的13款APP,低调奢华有内涵

    低调却非常实用的APP,用了都舍不得删! 实用工具箱(多功能实用工具箱) 提供了从日常、图片、查询、设备、辅助、提...

  • 好看又实用,这些颜值爆表的杯子你值得收藏!

    大家好,我是小丸子,今天想给大家分享一些好看实用,颜值不错的日常使用的杯子。日常款的杯子应该要考虑到它的实用性,当...

  • 工作流程清单

    2017.09.28 周四 高畅 嗨喽啊,这是我新开的文集,叫做《实用清单集合》。在这里,我会在日常实用阅读和...

  • 开个小店5—店铺的日常经营(实用篇)

    店铺总算开起来了,接下来就是做好日常运营了。 有一个亲身经历就是,自己管和不管,最后的营业情况完全不同。 一、人员...

  • 日常母婴实用App

    趁bb睡觉来推荐几个怀孕之后陆续下的实用母婴app吧 第一排三个怀孕时候一直在用 前两个估计孕妈妈也都有下吧 输入...

网友评论

    本文标题:qs-日常实用篇

    本文链接:https://www.haomeiwen.com/subject/ofhqxhtx.html