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

2019-08-20 17:07:36 +08:00
 wednesdayco

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

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

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

3619 次点击
所在节点    JavaScript
17 条回复
SilentDepth
2019-08-20 17:26:37 +08:00
「这种“非空字符串”只能在 resolver 里面验证么?」
是的。

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

---

@wednesdayco #9
这是一个习惯问题。「空值」就应当指 null,「空字符串」(或简称「空串」)才是指 ""。
Zink99
2019-08-21 17:58:53 +08:00
@SilentDepth #14 产品用屁股想出来的需求,能咋办嘛
SilentDepth
2019-08-21 18:00:10 +08:00
@Zink99 #15 打死他
Zink99
2019-08-21 18:06:59 +08:00
@SilentDepth #16 老哥,看了你的回复,你阔以带带我这个菜鸡前端吗(认真脸

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX