是否有一个通用的 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;
}
您可以只检查变量是否有truthy
值。这意味着
if( value ) {
}
将评估为true
if value
is not:
上面的列表代表falsy
了 ECMA-/Javascript 中所有可能的值。在部分的规范中找到它ToBoolean
。
此外,如果您不知道变量是否存在(也就是说,如果已声明),您应该检查typeof
操作符。例如
if( typeof foo !== 'undefined' ) {
// foo could get resolved and it's defined
}
如果您可以确定至少声明了一个变量,则应直接检查它是否具有truthy
如上所示的值。
检查值是否未定义或为空的详细方法是:
return value === undefined || value === null;
您也可以使用==
运算符,但这需要知道所有规则:
return value == null; // also returns true if value is undefined
function isEmpty(value){
return (value == null || value.length === 0);
}
这将返回真
undefined // Because undefined == null
null
[]
""
和零参数函数,因为函数length
是它所采用的声明参数的数量。
要禁止后一类,您可能只想检查空白字符串
function isEmpty(value){
return (value == null || value === '');
}
这是最安全的检查,我还没有看到它完全像这样发布在这里:
if (typeof value !== 'undefined' && value) {
//deal with value'
};
它将涵盖从未定义值的情况,以及以下任何一种情况:
编辑:更改为严格相等(!==),因为它现在是规范;)
您可能会发现以下功能很有用:
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 阶段(稻草人)提案。” – 西蒙·凯尔伯格。作者希望支持这项美丽的升职提议。