Javascript 如果为null或为空,则Number()默认为0

Javascript 如果为null或为空,则Number()默认为0,javascript,Javascript,我正在使用数字构造函数将字符串转换为数字,不管它们是int还是float,但我在代码中检测到一个错误,其中空值被显式设置为0。最终我发现,如果字符串为空或传入null,则在字符串转换过程中,Number默认为0。虽然我可能会用一个条件将其包装起来以检查这一点,但事实上Number确实如此,这似乎并不是什么Javascript行为 我想知道在创建构造函数时是否考虑了这种默认行为可能导致的问题,因为我假设如果是这样的话,会有一个更直接的解决方案,如果是这样的话,是否有人知道这可能是什么,也许是我还没

我正在使用数字构造函数将字符串转换为数字,不管它们是int还是float,但我在代码中检测到一个错误,其中空值被显式设置为0。最终我发现,如果字符串为空或传入null,则在字符串转换过程中,Number默认为0。虽然我可能会用一个条件将其包装起来以检查这一点,但事实上Number确实如此,这似乎并不是什么Javascript行为

我想知道在创建构造函数时是否考虑了这种默认行为可能导致的问题,因为我假设如果是这样的话,会有一个更直接的解决方案,如果是这样的话,是否有人知道这可能是什么,也许是我还没有找到的方法

清楚地说,这是一个容易解决的问题,无论是使用条件还是使用parseInt或parseFloat,但问题的目的不是寻找替代解决方案,而是询问是否存在方法或内置解决方案

say parseFloat和Number之间存在差异,这可能会产生额外的结果,例如parseFloat返回1而不是输入1a的NaN,或者如果有人想要传递十六进制值


更重要的是,这种默认行为可能会产生相当大的后果。在这个例子中,假设我想让用户定义一个字符限制。他们决定不填写此可选输入,但在我使用的代码中,数字现在默认为0。如果任何人的字符数超过0,则使用该方法生成的任何验证现在都将失败。设置默认值非常奇怪,特别是在我看来是0。当然,我可以并且只会检查输入是否有值,或者其他任何数量的解决方案,我的测试很容易抓住这一点,但是走这么远似乎是脆弱和不直观的。

这是javascript中类型转换的一个相当典型的问题。使用类型转换时,空字符串、0和false都被视为“false”值。如果希望将数字从空字符串转换为NaN,则可以使用parseFloat,10。parseFloat是在Javascript中将字符串转换为数字的一种简单方法。

parseInt和parseFloat也存在。这是一个意见问题。如果我们谈论的是观点的话,它是非常Javascripty的所有自动类型强制和真实值Javascript所做的,这是公认的经常混淆和设计选择的许多批评的主题。这是尽可能多的Javascript行为->@user120242通常parseFloat是好的,但在这种情况下,我相信其他案件的数字是首选;我现在的偏好是因为它返回NaN,对于在ex:2a中传递的任何其他内容,都不会像parseFloat那样返回2,尽管我也可以为此创建一个捕获。这并不是说我不能很容易地使这两种方法都起作用,而是说这似乎是一个非常奇怪的问题,没有一种方法作为解决方案,但我还没有找到一个。称之为好奇。可能有一个很好的表单验证库可以为您完成这项工作。就您对数字强制的设计选择的评论而言,Javascript语言本身在处理松散类型时不应该直接关注表单验证用例,而应该关注如何最好地强制值,以便它们与语法中的使用保持一致,例如,使用truthy/falsy值,并且更喜欢使用可用值。请注意,正如您可能看到的,这可能只是对设计选择的一种看法。但是,在很多情况下,默认行为是可取的哦,关于反对票。这可能是由于避免固执己见和辩论式的讨论主题而没有具体答案的政策。我不会太担心的。这只是一种标记问题和主题的方式,这些问题和主题适合/质量良好,但不适合。在我与@user120242的对话中,我在评论中证明了这正是发生的事情,我假设我应该处理数字,null和空字符串不等于0;将其视为truthy/falsy对于输出为0是有意义的。