V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
wednesdayco
V2EX  ›  JavaScript

GraphQL 的非空字符串是可以为空字符串("")的?

  •  1
     
  •   wednesdayco · 2019-08-20 17:07:36 +08:00 · 3595 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文档原文“默认情况下,每个类型都是可以为空的 —— 意味着所有的标量类型都可以返回 null。使用感叹号可以标记一个类型不可为空,如 String! 表示非空字符串。”

    意味着字符串""是合法的(实验后确实也是这样),那么验证""这种“非空字符串”只能在 resolver 里面验证么?

    GraphQL 的非空字符串貌似跟我平时理解的非空字符串有差异啊……难道不是 Null 和""都是空么?

    17 条回复    2019-08-21 18:06:59 +08:00
    SilentDepth
        1
    SilentDepth  
       2019-08-20 17:26:37 +08:00
    「这种“非空字符串”只能在 resolver 里面验证么?」
    是的。

    「难道不是 Null 和""都是空么?」
    null 是 null,空字符串是空字符串,它们可以表达不同的业务含义。不要被 JS 的隐式类型转换误导:
    null == "" // true
    null === "" // false
    wednesdayco
        2
    wednesdayco  
    OP
       2019-08-20 18:16:26 +08:00
    @SilentDepth 同理还有空数组,空对象- -对吧
    SilentDepth
        3
    SilentDepth  
       2019-08-20 18:25:26 +08:00
    @wednesdayco #2 是的,还有 undefined、NaN
    jmc891205
        4
    jmc891205  
       2019-08-20 18:29:33 +08:00
    null 是虚无
    ""才是空字符串
    no1xsyzy
        5
    no1xsyzy  
       2019-08-20 20:02:55 +08:00
    此空非彼空
    Python 里面 None 类型都不一样,根本不是字符串
    TangMonk
        6
    TangMonk  
       2019-08-20 20:03:59 +08:00
    此空非彼空,一切皆空
    StarkWhite
        7
    StarkWhite  
       2019-08-20 20:44:05 +08:00
    null 和 "" 本来就不是一个含义,在很多语言都不一样的,只是 js,php 等动态语言会自动转换而已。
    GraphQL 很严谨的,业务上也应该区分开来,resolver 里校验 "" 是可以的。
    Zink99
        8
    Zink99  
       2019-08-21 09:51:07 +08:00
    身为前端我一直理解 ID! String! 这类为必传参数
    所以当我必须传一个字符串,但是我又没有实际值可传的时候,传一个 "" 感觉是很自然的事。。。
    wednesdayco
        9
    wednesdayco  
    OP
       2019-08-21 10:38:25 +08:00
    @Zink99 gql 中文文档写的是非空值= =,之后翻了下英文文档写的是 Non-Null 这就合理多了 = = 。
    StarkWhite
        10
    StarkWhite  
       2019-08-21 12:10:04 +08:00
    @wednesdayco 那就是翻译问题了
    StarkWhite
        11
    StarkWhite  
       2019-08-21 12:10:52 +08:00
    @Zink99 机智。原来 v 站能发狗头表情哈 ,为啥我复制粘贴就是空的呢?
    Zink99
        12
    Zink99  
       2019-08-21 12:12:25 +08:00
    @StarkWhite #11 插件:v2ex plus
    StarkWhite
        13
    StarkWhite  
       2019-08-21 12:31:38 +08:00
    @Zink99 原来这样啊,thx
    SilentDepth
        14
    SilentDepth  
       2019-08-21 17:48:48 +08:00
    @Zink99 #8
    如果设定上必须传一个值,但实际上没有值可传,那一定是逻辑实现有问题,或者业务实现有问题。传 "" 是一个偷懒但危险的办法。

    ---

    @wednesdayco #9
    这是一个习惯问题。「空值」就应当指 null,「空字符串」(或简称「空串」)才是指 ""。
    Zink99
        15
    Zink99  
       2019-08-21 17:58:53 +08:00
    @SilentDepth #14 产品用屁股想出来的需求,能咋办嘛
    SilentDepth
        16
    SilentDepth  
       2019-08-21 18:00:10 +08:00
    @Zink99 #15 打死他
    Zink99
        17
    Zink99  
       2019-08-21 18:06:59 +08:00
    @SilentDepth #16 老哥,看了你的回复,你阔以带带我这个菜鸡前端吗(认真脸
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5350 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:01 · PVG 16:01 · LAX 01:01 · JFK 04:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.