但作为判断电话,我认为我们可以相对简单地检查
null
或空值,因此我正在寻找有关String.isNullOrEmpty
的此实现的反馈。String.isNullOrEmpty = function (value) {
return (!value || value == undefined || value == "" || value.length == 0);
}
#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
第三,我将删除
!value
和value === ""
条件。它们是多余的。我的修订版
我会使用与您稍有不同的方法:
检查值的类型是否为
"string"
(因此为非null且未定义),以及它是否为空。如果是这样,它就不能为null或为空。请注意,对于非字符串输入,它返回
true
,如果您想为意外的输入类型引发错误,则可能不是您想要的。#3 楼
您的函数意外为以下非字符串值返回true
:false
0
Number.NaN
[[]]
[]
尽管
!value
同样草率,但很可能就足够了,在这种情况下,您根本不需要定义此函数。但是,如果您创建一个名为isNullOrEmpty
的函数,那么它应该只执行此操作。function String.isNullOrEmpty(value) {
return value == null || value === "";
}
请注意,
value == null
是value === null || value === undefined
的简写。评论
\ $ \ begingroup \ $
这很干净。正如许多人所暗示的那样,使用胁迫并不是邪恶的。只要您意识到自己正在这样做,以及它为什么以及为什么起作用。
\ $ \ endgroup \ $
–乔·约翰斯顿(Joe Johnston)
18 Mar 7 '18 at 19:04
#4 楼
您应该使用Object.prototype.isNullOrEmpty = function() { alert(this) }
。在所有实例中,这都将其与String对象相关联。如果您打算将其用作传递变量的函数,那么这将开始使您可以访问使用诸如"".isNullOrEmpty
或var 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
评论
您已经尝试在值上调用toString后,第一个检查不是多余吗?可能...。我在考虑是否要调用“静态” String.isNullOrEmpty()。不知道我是否需要它。
该修订版不好,请参阅此文章和其他文章。您已经彻底改变了函数的含义。
不会返回!value;够吗?
OG网站@MuhammadOmerAslam似乎已经死了,但是,我添加了另一篇文章讨论该问题。希望对您有所帮助:P