AngularJS - 如何同时检测未定义、空值和null的最佳方式?

6
有时候我需要同时检查一个值是否为 null、undefined 或者 "" 中的任意一种。由于我没有找到任何方法来做这个操作,所以我自己编写了一个方法并且它可以正常工作。
$scope.isNullOrEmptyOrUndefined = function (value) {
    if (value === "" || value === null || typeof value === "undefined") {
        return true;
    }
}

我想知道是否有更好的方法来完成同样的事情。

非常感谢您提前的帮助,

Guillermo


2
如果条件是 false 或者 NaN,你有可能得到这样的值吗?如果是的话,只需返回 return !value。另外,你也可以使用 value == null 来判断是否为 undefined。 - PSL
2
angular.isDefined() - https://docs.angularjs.org/api/ng/function/angular.isDefinedangular.isDefined() - 判断一个变量是否已定义。https://docs.angularjs.org/api/ng/function/angular.isDefined - gearsdigital
2
@gearsdigital,为什么不把它写成一个答案呢? - Shomz
4个回答

14

这个怎么样?因为在那些空值/未定义的情况下,您似乎正在返回true:

$scope.isNullOrEmptyOrUndefined = function (value) {
    return !value;
}

请注意,空数组和空对象也会返回false,因为它们是真值。如果想要true/false的返回值翻转,那么省略value前面的!即可。

http://jsfiddle.net/1feLd9yn/3/


为什么只使用3个否定,而不是使用5个或7个? - Shomz
没错,这是一个双重否定。 - Shomz
3
当值为0(数字)时,这个答案的问题就出现了。由于0是假值,即使我们不希望它返回true,函数也会返回true。尝试简洁明了不错,但存在问题。 - Niko Bellic
@NikoBellic 你说得对。我观察到的是,当我将0作为值输入并检查其是否有效时,如果将其与空字符串''进行比较,它会失败。我必须将其与undefined进行比较才能使其正常工作。 - Devner
我一直被教导,如果我的函数名称中有“或”字眼,那么它们就做得太多了! - Neil
显示剩余4条评论

6

更新

如评论中所述,最好使用return !value

$scope.isValid = function(value) {
    return !value
}

旧的和不完整的答案

一个正确的方法就是简单地使用angular.isDefined()


3
这是该函数的实现:function isDefined(value){return typeof value !== 'undefined';} - Ofiris
7
此处仅检查未定义的情况,不包括空字符串或null。 return !value 是正确的答案。 - Chris Marasti-Georg
4
如果函数 isValid 旨在在参数不是 undefined 或空字符串时返回 true,则应该返回 !!value。现在它对 undefined 和空字符串参数返回了 true。 - JanneK

1
**AngularJS - What is the best way to detect undefined null or empty value at the same time?**

你可以定义一个函数或者使用内联命令。
$scope.isNullOrUndefined = function(value){
   return (!value) && (value === null)
}

or 

var temp = null;
(temp) ? 'I am not null' : 'yes I am null or undefined';
"yes I am null or undefined"

var temp = undefined
(temp) ? 'I am not null' : 'yes I am null or undefined';
"yes I am null or undefined"

temp = '123123Rec'
(temp) ? 'I am not null' : 'yes I am null or undefined';
"I am not null"

欢迎来到 Stack Overflow。请对您的代码进行格式化,并添加描述,以便人们能够理解您的代码功能。 - Syfer

0

我尝试了下面的代码,在我的AngularJS应用程序中完美运行。

function isValid(value) {
            return typeof value !== 'undefined';
        };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接