【问题标题】:Javascript : How to process function's argument even if it undefinedJavascript:如何处理函数的参数,即使它未定义
【发布时间】:2019-06-14 14:45:50
【问题描述】:

我正在创建一个函数来检查给定值是否为空,如果它未定义、等于空字符串或长度为零,它将返回 true。这就是我所做的

isEmpty(value){
    if(typeof(value)=='undefined'){
        return true;
    }
    else if(value==''||value.length==0){
        return true;
    }
    return false;
}

但是当我评估一些未定义的变量时,例如 isEmpty(foo) 它会抛出一个未捕获的引用错误,但我想返回 true,该怎么做?

function isEmpty(value) {
  if (typeof(value) == 'undefined') {
    return true;
  } else if (value == '' || value.length == 0) {
    return true;
  }
  return false;
}

console.log(isEmpty(value))

【问题讨论】:

  • 应该定义你试图从外部传递的变量。 like let x; 如果变量本身不被定义,那么它会抛出错误。
  • 您可能还想查看value == null
  • 正如@kaushik所说,变量应该在传递之前定义。除非你应该使用类似:try { isEmpty } catch (e) { }.
  • 试试这个fiddle

标签: javascript


【解决方案1】:

你理解Undefined错了

未定义表示一个变量已被声明,但该变量的值 变量尚未定义(尚未赋值)。例如:

function isEmpty(value){

// or simply value===undefined will also do in your case
  if(typeof(value)==='undefined'||value==''||value.length==0){
        return true;
    }
  return false;
        
}
let foo; // declared but not assigned a value so its undefined at the moment
console.log(isEmpty(foo))


   

添加 - 什么是未捕获的 ReferenceError:未定义“x”。

在某处引用了一个不存在的变量。这个变量 需要声明,或者你需要确保它在你的 当前脚本或范围。

很明显,你没有在上下文的任何地方引用你的变量,所以你得到了那个异常。Follow Up Link

通过捕获引用错误,您可以检查变量是否在范围内或是否已声明

// Check if variable is declared or not

//let value;
try {
  value;
} catch (e) {
  if (e.name == "ReferenceError") {
    console.log("variable not declared yet")
  }


}

// or the function approach


function isEmpty(value){

// or simply value===undefined will also do in your case
  if(typeof(value)==='undefined'||value==''||value.length==0){
        return true;
    }
  return false;
        
}


try {
  isEmpty(value);
} catch (e) {
  if (e.name == "ReferenceError") {
    console.log("variable not declared yet")
  }
}

【讨论】:

  • 这里你并不需要typeofvalue === undefined 应该没问题,因为 value 保证至少会被声明。
  • 是的,你是绝对正确的,但这就是问题中所说的。我仍然会在@MarkMeyer上添加
  • 如果该变量不存在怎么办?
  • 更新了我的答案@MatiusNugrohoAryanto
【解决方案2】:

这就是你要找的,value===undefined 首次修复的测试。

const isEmpty = (value) => value===undefined||typeof(value)==='undefined'||value===''||value.length===0;

let foo;
let bar = 'test';

console.log(isEmpty());
console.log(isEmpty(foo));
console.log(isEmpty(bar));

【讨论】:

  • 如果我希望 isEmpty(xxx) 被评估为真,即使 xxx 从未在任何地方声明过
  • 我认为理解错误是在调用时抛出的,不是在你的测试方法中是很重要的。所以console.log(isEmpty(myUndeclaredVariable)); 会导致错误。不是isEmpty 函数本身。
  • 我知道,当变量未声明时,它不存在于内存中是吗?然后我想检查为真,即使变量还不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2016-04-07
相关资源
最近更新 更多