是否有一个通用的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;
}
我认为使用?操作员稍微干净一点。
var ? function_if_exists() : function_if_doesnt_exist();
var myNewValue = myObject && myObject.child && myObject.child.myValue;
这将永远不会引发错误。如果myObject,child或myValue为null,则myNewValue将为null。没有错误将被抛出
function isEmpty(val){
return !val;
}
但是此解决方案是过度设计的,如果您以后不想为业务模型需求修改功能,那么直接在代码中使用它更干净:
if(!val)...
尝试不同的逻辑。您可以使用下面的代码检查所有四(4)条条件以进行验证,例如not null,not blank,not undefined和not zero,仅在javascript和jquery中使用此代码(!(!(variable)))。
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
alert("data "+data);
}
else
{
alert("data is "+data);
}
}
这可能是有用的。
数组中的所有值都表示您想要的内容(空,未定义或其他内容),然后在其中搜索所需内容。
var variablesWhatILookFor = [null, undefined, ''];
variablesWhatILookFor.indexOf(document.DocumentNumberLabel) > -1
如果尚未声明该变量,则将无法使用函数测试未定义变量,因为会出现错误。
if (foo) {}
function (bar) {}(foo)
如果尚未声明foo,则两者都将产生错误。
如果要测试是否已声明变量,可以使用
typeof foo != "undefined"
如果要测试是否已声明foo并且它具有一个值,则可以使用
if (typeof foo != "undefined" && foo) {
//code here
}
这是我的-如果value为null,undefined等或空白(即仅包含空格),则返回true:
function stringIsEmpty(value) {
return value ? value.trim().length == 0 : true;
}
你有点过分了。要检查变量是否没有值,只需要检查undefined和null。
function isEmpty(value){
return (typeof value === "undefined" || value === null);
}
假设0
,""
和对象(甚至是空对象和数组)都是有效的“值”。
!检查空字符串(“”),null,undefined,false以及数字0和NaN。说,如果字符串为空,var name = ""
则console.log(!name)
返回true
。
function isEmpty(val){
return !val;
}
如果val为空,null,未定义,false,数字0或NaN,则此函数将返回true 。
要么
根据您的问题域,您可以只使用like !val
或!!val
。
此条件检查
if (!!foo) {
//foo is defined
}
是你所需要的全部。
如果您更喜欢纯JavaScript,请尝试以下操作:
/**
* Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
* length of `0` and objects with no own enumerable properties are considered
* "empty".
*
* @static
* @memberOf _
* @category Objects
* @param {Array|Object|string} value The value to inspect.
* @returns {boolean} Returns `true` if the `value` is empty, else `false`.
* @example
*
* _.isEmpty([1, 2, 3]);
* // => false
*
* _.isEmpty([]);
* // => true
*
* _.isEmpty({});
* // => true
*
* _.isEmpty('');
* // => true
*/
function isEmpty(value) {
if (!value) {
return true;
}
if (isArray(value) || isString(value)) {
return !value.length;
}
for (var key in value) {
if (hasOwnProperty.call(value, key)) {
return false;
}
}
return true;
}
否则,如果您已经在使用下划线或破折号,请尝试:
_.isEmpty(value)
function isEmpty(value){
return (value == null || value.length === 0);
}
这将返回true
undefined // Because undefined == null
null
[]
""
和零参数函数,因为函数length
是它所使用的已声明参数的数量。
要禁止使用后一种类别,您可能只需要检查空白字符串即可
function isEmpty(value){
return (value == null || value === '');
}
评分最高的第一个答案是错误的。如果值未定义,它将在现代浏览器中引发异常。您必须使用:
if (typeof(value) !== "undefined" && value)
要么
if (typeof value !== "undefined" && 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(strawman)建议。” –西蒙·凯贝格(Simon Kjellberg)。作者希望对这个美丽的接受皇家提升的提议表示支持。
检查value是undefined还是null的详细方法是:
return value === undefined || value === null;
您还可以使用==
运算符,但这希望人们知道所有规则:
return value == null; // also returns true if value is undefined
尽管很老套,但忘记的是他们应该包装自己的代码块,然后捕获错误,然后进行测试...
因此,您真的不必事先检查潜在的问题,只需抓住它,然后按需要进行处理即可。