是否有一种通用的JavaScript函数,可以检查变量是否具有值,并确保它不是undefined
或null
?我有这段代码,但我不确定它是否涵盖了所有情况:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
是否有一种通用的JavaScript函数,可以检查变量是否具有值,并确保它不是undefined
或null
?我有这段代码,但我不确定它是否涵盖了所有情况:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
您可以检查变量是否具有真值或假值。这意味着
if (value) {
// do something..
}
如果value
不是以下任何一种值:
则会被评估为true
。以上列表中的所有值在ECMA-/Javascript中均为假值(falsy)。您可以在规范的ToBoolean
部分找到它们。
此外,如果您不确定一个变量是否存在(也就是说,它是否已经声明),您应该使用typeof
运算符进行检查。例如:
if (typeof foo !== 'undefined') {
// foo could get resolved and it's defined
}
如果您可以确定一个变量至少被声明了,您应该直接检查它是否具有如上所示的"truthy"值。if( value || value === false )
的代码。对于所有假值,我们需要明确地进行验证。 - jAndyvalue.length != 0
以获取非空数组。 - userif
语句结构过于繁琐,可以使用三元运算符来代替,例如:var result = undefined ? "truthy" : "falsy"
。或者如果你只是想将其强制转换为布尔值,可以使用 !!
运算符,例如:!!1 // true
, !!null // false
。 - KFL检查值是否未定义或为空的冗长方法是:
return value === undefined || value === null;
您也可以使用 == 运算符,但这需要知道所有规则:
<code>return value == null; // also returns true if value is undefined
</code>
null
或undefined
可以这样做:if (value == null)
。注意使用的是强制类型转换的 ==
运算符。如果你像这样检查if (value === null || value === undefined)
,那么你可能忘记了/不知道Javascript如何进行强制类型转换。参考链接:http://webreflection.blogspot.nl/2010/10/javascript-coercion-demystified.html - Christiaan Westerbeekarg == null
和arg === undefined || arg === null
会产生相同的结果。尽管如此,作者认为后一种写法更易读。 - Salman Aundefined
不同,使用 return value === (void 0)
更加安全。 - x0nfunction isEmpty(value){
return (value == null || value.length === 0);
}
这将返回true,对于
undefined // Because undefined == null
null
[]
""
还有零个参数的函数,因为一个函数的length
是它所需的声明参数的数量。
为了禁止后一类情况,您可能希望仅检查空字符串。
function isEmpty(value){
return (value == null || value === '');
}
检查字符串是否为空或者仅包含空格字符
function isEmpty(value){
return (value == null || value.trim().length === 0);
}
undefined == null
but undefined !== null
- Ian Boydundefined == null(true)
undefined != null(false)
undefined === null(false)
undefined !== null(true)
为了更有帮助地指导人们朝正确的方向前进,最好提供更多信息。可以参考 Mozilla 文档中关于两者区别的内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness - Corey Young这是最安全的检查方法,我在这里没看到过完全像这样发布的:
if (typeof value !== 'undefined' && value) {
//deal with value'
};
它将覆盖从未定义值的情况,以及以下任何一种情况:
编辑:已更改为严格相等运算符(!==),因为这是目前的标准;)
我非常喜欢的一个解决方案:
我们可以定义一个空变量是null
、undefined
,或者如果它的长度为零,则为空,或者如果它是一个对象,则没有键:
function isEmpty (value) {
return (
// null or undefined
(value == null) ||
// has length and it's zero
(value.hasOwnProperty('length') && value.length === 0) ||
// is an Object and has no keys
(value.constructor === Object && Object.keys(value).length === 0)
)
}
返回:
undefined
, null
, ""
, []
, {}
true
, false
, 1
, 0
, -1
, "foo"
, [1, 2, 3]
, { foo: 1 }
if (!value || value === '') { delete a.b[field]; } else { a.b[field] = {val: value, ... }; }
- 这是一个非常明显但又令人烦恼的错误 ;) - RAM237??
运算符 - 看作是在处理 null
或 undefined
时“回退”到默认值的一种方式。let x = foo ?? bar();
再次强调,上述代码等同于以下代码。
let x = (foo !== null && foo !== undefined) ? foo : bar();
if ((x ?? null) === null)
来检查 null
或 undefined
。 - Marcos Pereira??=
。例如:name ??= 'bob'
等同于 name = (name !== null && name !== undefined) ? name : 'bob'
。文档:nullish 合并赋值运算符 (??=) - tinystone你可能会发现以下函数很有用:
function typeOf(obj) {
return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
或在 ES7 中(如有改进请评论)
function typeOf(obj) {
const { toString } = Object.prototype;
const stringified = obj::toString();
const type = stringified.split(' ')[1].slice(0, -1);
return type.toLowerCase();
}
结果:
typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/) //regexp
typeOf(new Date()) //date
typeOf(new WeakMap()) //weakmap
typeOf(new Map()) //map
请注意,绑定运算符(::)并不是ES2016(ES7)或任何后续版本的ECMAScript标准的一部分。它目前仅是一个雏鸟阶段0的提议,旨在引入该语言。作者希望为这个美丽的提议增加支持,以获得皇家认可。
::
)不是 ES2016(ES7)或任何后续版本的 ECMAScript 标准的一部分。目前,它是一个雏鹤阶段 0 的提案,旨在引入该语言中。 - Simon Kjellberg这个条件检查
if (!!foo) {
//foo is defined
}
你所需要的就是爱。
if
已经执行了 falsy 检查,而这只是将其转换为布尔值。它是否能够捕获任何正常的 if(foo)
无法捕获的情况? - Daan van Hulstactive={!!foo}
。 - Ben Kolya Mansley第一个最高评分的答案是错误的。如果值未定义,在现代浏览器中将会抛出异常。你需要使用:
if (typeof(value) !== "undefined" && value)
或者if (typeof value !== "undefined" && value)
value
为零时它返回false,这不是op想要的。 - Madbreaks!检查空字符串(""),null,undefined,false和数字0和NaN。例如,如果一个字符串是空的var name = ""
,那么console.log(!name)
返回true
。
function isEmpty(val){
return !val;
}
此函数会在 val 为空、null、未定义、false、数字0或NaN时返回true。
或者
根据您的问题领域,您可以使用类似于 !val
或 !!val
的方式。isEmpty(val)
,而不只是简单地用 !val
呢? - Allen Linatoc!val
或!!val
。 - Arif
(truthy statement) ? true : false;
。直接写成(truthy statement);
即可。 - David Baucumif (hungry) …
而不是if (hungry === true) …
。就像所有编码风格一样,这只是个人审美问题。更具体地说,对于 OP 提供的例子,他更冗长地表达了“如果它为真,则为真,如果不为真,则为假”,但如果它为真,则已经是真的。如果它为假,则已经是假的。这相当于说:“如果你饿了,那么你就饿了,如果不饿,那么你就不饿。” - David Baucum