在此用例中,是返回null更好呢,还是扩展JSON并使用javascript的Infinity值更合适?后者似乎更合适,但我从未见过使用此方法的API示例。
如果有人有公共Web API表示无穷大的示例,那也很酷。
我的建议是添加一个“limit”字段,仅在确实存在限制时才存在:
当用户还剩下40个时:
{
"yourdata":"",
"limit": 40
}
当用户拥有无限制的访问权限时,请将其删除,表示没有任何限制:
{
"yourdata":""
}
我的建议是对于具体的值使用数字,对于理论性的值则使用字符串。我认为这样最清晰易懂。
{
"shoes": 89,
"cars": "infinity",
"myBankAccount": "negative-infinity"
}
-1
、null
和undefined
(属性不存在)表示无限制。-1
来指定没有限制(内存、CPU、虚拟机),使用null会有问题,因为BlazeDS将null转换为0,而0是一个有效值。
数字1e500被解析为无穷大Infinity
console.log(1e500); // Gives Infinity
Or
JSON.parse('{"number": 1e500}'); // Gives {number: Infinity}
JSON.stringify(1e500)
返回 'null',因此它无法工作。 - Manuel Astudilloinf
值解析为Infinity
:import json
print(json.dumps({'an_inf': float("inf") }))
输出:
{"an_inf": Infinity}
Python的json库也知道如何解析这种非标准的JSON表示法:
print(json.loads('{"new_sample_median": Infinity }'))
输出:
{'new_sample_median': inf}
也许将无限制的订阅表示为完全不同的订阅类型会更好,这样您甚至不必考虑如何表示无穷大的问题。将来,您可能希望尝试基于时间而非数量的订阅,例如在一个月内无限制访问,然后您将不得不处理到期日期。
话虽如此,像1e100这样的有限但足够大的数字怎么样?如果计算一下,1e100 - 1 = 1e100,在浮点运算的有限精度下是成立的。
你不能扩展JSON。好吧,你可以扩展它,但那时它就不再是JSON了。在JSON中没有表示无穷大或NaN的方法。数字有非常严格的语法规则,而无穷大或NaN不是其中的一部分。
你可以存储一个非常大的值(1e300),你可以使用字符串“Inf”或“NaN”,并确保每个处理它的人都正确处理它,或者可能使用{ "value": "Inf" },然后你可以相当确定每个人都会正确处理它或崩溃。
我建议使用JavaScript的Infinity值,因为它是一致的。
例如:
var x = 1;
var y = 0;
var z = x / y;
console.log(z);
// results in `Infinity`
我会说null
也是另一个选择,但这可能会被误解为没有值,而Infinity
实际上是一个无限可能的值。
绝对不要使用NaN
。它是一个奇怪的存在,ES为此异常道歉。
以这个为例:
var x = NaN;
if (x === x) {
console.log('Good');
} else {
console.log('What?');
}
上述答案的结果是“什么?”这告诉我们NaN实际上是一种不是数字的值。
此外,它的typeof
是一个number
。您可以判断它是正无穷大还是负无穷大。如果您正在处理数字,请使用Infinity
。它始终等于Infinity
,并且将是最佳解决方案。
var x = Math.log(0);
console.log(x);
console.log(typeof(x));
if (x === x) {
console.log('yes');
}
更新
从这里 - 您可以使用:
{ a: { is_infinity: true, value: null }, b: { is_infinity: false, value: 10 } }