给出一个JSON:
[
{ "id":"A", "status": 1, "rank":1, "score": },
{ "id":"B", "status": 1, "rank":1, "score": }
]
我的脚本因空分而失败。
鉴于JS这样:
if (json[i].score) { do something } else { calculate it }
我想保持字段为空,而不是使用0.我可能会使用"score": ""
,但这意味着它是一个字符串(开头为空),而我想要得分是数字(开始时为空)。所以我推入的数字保持一个数字,而不是一个字符串。
如何声明空/未定义的数字?
注意:我直觉地认为这就是为什么我有时会见undefined
。
编辑:编辑问题以澄清上下文,需要检查obj.score的存在,其中0会产生误导。
答案 0 :(得分:4)
TL; DR :如果每个人都以零分开始,请使用0
(零)。如果您特别想要说某人的分数尚未设定,请使用null
。不要定义属性,如果它不应该放在特定的情况下(比如甚至不应该具有"score"
属性的对象)。
好吧,在JSON中,您不能只省略该值。它必须设置为数字(整数或浮点数),对象,列表,布尔值,空值或字符串。要阅读有关语法的更多信息,请尝试使用以下资源:http://json.org/。这是从该站点获取的图表,显示了JSON中对象表示的语法:
null
,0
(零),未定义通常的方法是设置null
。在其他情况下,如果适用,最好使用0
(零)(例如,该字段的意思是“ sum ”)。
另一种方法是不设置属性。在反序列化之后,您可以执行测试,检查是否存在特定属性:
JavaScript的:
if (typeof my_object.score !== 'undefined'){
// "score" key exists in the object
}
的Python:
if 'score' in my_object:
pass # "score" key exists in the object
PHP:
if (array_key_exists('score', $my_object)) {
// "score" key exists in the object
}
false
,""
在这种情况下,有些人也接受false
的价值,但它相当不一致。同样,当涉及到空字符串(""
)时。但是,在反序列化期间,大多数编程语言都应该适当支持这两种情况。
答案 1 :(得分:1)
为什么不在0开始得分?几乎任何涉及得分的人都会以0分开始。
[
{ "id":"A", "status": 1, "rank":1, "score": 0 },
{ "id":"B", "status": 1, "rank":1, "score": 0 }
]
答案 2 :(得分:1)
根据定义,数值是值类型,不能是null
。只应将引用类型(如字符串,数组等)初始化为null
。
对于您的情境的语义,我建议您使用布尔值来了解是否有要读取的分数。
[
{ "id":"A", "status": 1, "rank":1, "empty":true },
{ "id":"B", "status": 1, "rank":1, "empty":false, "score":100}
]
然后,
if (!foo.empty) {
var score = foo.score;
}
虽然也可以测试null
,但它是一个数字的错误表示。