是否有标准函数检查 JavaScript 中的 null,undefined 或空白变量?

是否有通用的 JavaScript 函数可检查变量是否具有值并确保其undefined或为null ?我有以下代码,但是不确定是否能涵盖所有情况:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}

答案

您可以只检查变量是否具有truthy值。那意味着

if( value ) {
}

如果value 不是,将评估为true

  • 空值
  • 未定义
  • N
  • 空字符串(“”)
  • 0

上面的列表表示 ECMA- / Javascript 中所有可能的falsy值。在规范ToBoolean部分中找到它。

此外,如果您不知道变量是否存在(也就是说,是否已声明 ),则应使用typeof运算符进行检查。例如

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

如果可以确定至少声明了一个变量 ,则应直接检查它是否具有truthy所示的truthy值。

进一步阅读: http : //typeofnan.blogspot.com/2011/01/typeof-is-fast.html

检查 value 是 undefined 还是 null 的详细方法是:

return value === undefined || value === null;

您还可以使用==运算符,但这希望人们知道所有规则

return value == null; // also returns true if value is undefined
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) {
    //deal with value'
};

它将涵盖从未定义过价值的情况,以及以下任何一种情况:

  • 空值
  • 未定义(未定义的值与从未定义的参数不同)
  • 0
  • “”(空字符串)
  • N

编辑:更改为严格相等(!==),因为目前为止这是标准;)

您可能会发现以下功能有用:

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)。作者希望对这个美丽的接受皇家提升的提议表示支持。

评分最高的第一个答案是错误的。如果值未定义,它将在现代浏览器中引发异常。您必须使用:

if (typeof(value) !== "undefined" && value)

要么

if (typeof value  !== "undefined" && value)

检查空字符串(“”),null,undefined,false 以及数字 0 和 NaN。说,如果字符串为空,则var name = "" console.log(!name)返回true

function isEmpty(val){
  return !val;
}

如果val空,null,未定义,false,数字 0 或 NaN,则此函数将返回 true。

要么

根据您的问题域,您可以仅使用!val!!val

你有点过分了。要检查变量是否没有赋值,只需要检查 undefined 和 null。

function isEmpty(value){
    return (typeof value === "undefined" || value === null);
}

假设0""和对象(甚至是空对象和数组)都是有效的 “值”。

此条件检查

if (!!foo) {
    //foo is defined
}

是你所需要的全部。

我非常喜欢的解决方案:

让我们定义一个空白变量为nullundefined ,或者如果它具有长度,则为零,或者如果它是一个对象,则没有键:

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)
  )
}

返回值:

  • true: undefinednull""[]{}
  • 假: truefalse10-1"foo"[1, 2, 3] { foo: 1 }