我知道它不喜欢在JavaScript中编写C#。 (如果您不知道我在说什么,请查看此内容)。

但作为判断电话,我认为我们可以相对简单地检查null或空值,因此我正在寻找有关String.isNullOrEmpty的此实现的反馈。

String.isNullOrEmpty = function (value) {
    return (!value || value == undefined || value == "" || value.length == 0);
}


评论

您已经尝试在值上调用toString后,第一个检查不是多余吗?

可能...。我在考虑是否要调用“静态” String.isNullOrEmpty()。不知道我是否需要它。

该修订版不好,请参阅此文章和其他文章。您已经彻底改变了函数的含义。

不会返回!value;够吗?

OG网站@MuhammadOmerAslam似乎已经死了,但是,我添加了另一篇文章讨论该问题。希望对您有所帮助:P

#1 楼

开始于:

return (!value || value == undefined || value == "" || value.length == 0);


看最后一个条件,如果value ==“”,则其长度必须为0。因此将其删除:

return (!value || value == undefined || value == "");


但是等等!在JS中,空字符串为false。因此,删除value == ""

return (!value || value == undefined);


!undefined是true,因此不需要检查。所以我们有:

return (!value);


并且我们不需要括号:

return !value


QED

评论


\ $ \ begingroup \ $
我必须说...好棒
\ $ \ endgroup \ $
–六角形
2011年10月31日15:43

\ $ \ begingroup \ $
@ndp一定要给你。那是完整而简洁的。真好
\ $ \ endgroup \ $
–永恒
11年2月2日在20:37

\ $ \ begingroup \ $
@ndp,好答案!请稍等片刻,以免令人困惑。请在回答中添加结论,指出这是最终解决方案,以供快速参考,谢谢。
\ $ \ endgroup \ $
– Shimmy Weitzhandler
15年3月17日在7:16

\ $ \ begingroup \ $
一个非常好的答案ndp!我在回复中添加了一个截屏,显示了它的真实性,并显示了那些没有立即得到它的人的执行情况。 var A; var B = null; var C =“ test”; console.log(“是一个nullOrEmpty%o”,!A); console.log(“是B nullOrEmpty%o”,!B); console.log(“ is C nullOrEmpty%o”,!C);
\ $ \ endgroup \ $
– Paul Gorbas
18-09-24在0:01



\ $ \ begingroup \ $
但是,如果有人将其作为布尔值false传递,则它可能会返回误报。我认为我们还需要添加该支票。
\ $ \ endgroup \ $
–Himanshu
4月18日15:33

#2 楼

我将进行一些修订。

首先,在Javascript中始终使用===而不是==。您可以在Stack Overflow上了解有关此内容的更多信息。

其次,由于undefined是可变的,因此我建议使用

typeof value === "undefined"


而不是
/>
value === undefined


第三,我将删除!valuevalue === ""条件。它们是多余的。

我的修订版

我会使用与您稍有不同的方法:
检查值的类型是否为"string"(因此为非null且未定义),以及它是否为空。如果是这样,它就不能为null或为空。

请注意,对于非字符串输入,它返回true,如果您想为意外的输入类型引发错误,则可能不是您想要的。

#3 楼

您的函数意外为以下非字符串值返回true


false
0
Number.NaN
[[]]
[]

尽管!value同样草率,但很可能就足够了,在这种情况下,您根本不需要定义此函数。但是,如果您创建一个名为isNullOrEmpty的函数,那么它应该只执行此操作。

function String.isNullOrEmpty(value) {
    return value == null || value === "";
}


请注意,value == nullvalue === null || value === undefined的简写。

评论


\ $ \ begingroup \ $
这很干净。正如许多人所暗示的那样,使用胁迫并不是邪恶的。只要您意识到自己正在这样做,以及它为什么以及为什么起作用。
\ $ \ endgroup \ $
–乔·约翰斯顿(Joe Johnston)
18 Mar 7 '18 at 19:04

#4 楼

您应该使用Object.prototype.isNullOrEmpty = function() { alert(this) }。在所有实例中,这都将其与String对象相关联。如果您打算将其用作传递变量的函数,那么这将开始使您可以访问使用诸如"".isNullOrEmptyvar x = null; x.isNullOrEmpty();之类的字符串和变量:String.isNullOrEmpty();

评论


\ $ \ begingroup \ $
除了有些人不喜欢扩展本机原型。
\ $ \ endgroup \ $
– Peter Olson
2011-10-28 15:17

\ $ \ begingroup \ $
另外,具有null的示例将不起作用。
\ $ \ endgroup \ $
– Michal Leszczyk
2014年12月11日上午9:58

\ $ \ begingroup \ $
它也不适用于undefined。
\ $ \ endgroup \ $
–除盐
19年9月13日在13:43

#5 楼

瑞恩(Ryan)和肖恩(seand)都在:达到目标。

Object.prototype.isNullOrEmpty = function(value){
    return (!value);
}


这就是我最喜欢JavaScript的地方!

评论


\ $ \ begingroup \ $
只要确保没有其他人在Object.prototype中实现不同的isNullOrEmpty并严重依赖于他的实现即可。修补Object.prototype是邪恶的。
\ $ \ endgroup \ $
– Florian F
19年11月24日在22:53



\ $ \ begingroup \ $
不适用于null和undefined值
\ $ \ endgroup \ $
–瑞安
12月3日22:35