Javascript 什么时候一个未定义的变量抛出一个未捕获的TypeError,而不是仅仅有一个值'undefined'?

Javascript 什么时候一个未定义的变量抛出一个未捕获的TypeError,而不是仅仅有一个值'undefined'?,javascript,error-handling,undefined,undefined-behavior,Javascript,Error Handling,Undefined,Undefined Behavior,基本上,在我正在编辑的代码中,有一个函数接收一个对象参数,该参数有两个可能的键/值对,但根据某些条件只能使用其中一个: if(someConditionIsMet) { anotherFunction({ foo: "123"}); } else { anotherFunction({ bar: "321"}); } 这是将foobar分解为各个键的函数: function someFunction({ foo, bar }) { console.log(foo); // can

基本上,在我正在编辑的代码中,有一个函数接收一个对象参数,该参数有两个可能的键/值对,但根据某些条件只能使用其中一个:

if(someConditionIsMet) {
  anotherFunction({ foo: "123"});
} else {
  anotherFunction({ bar: "321"});
}
这是将foobar分解为各个键的函数:

function someFunction({ foo, bar }) {
  console.log(foo); // can be either { foo: "123"} or undefined
  console.log(bar); // can be either { bar: "321"} or undefined
}
这是我们将foobar参数传递给someFunction的地方:

这是foobar参数的来源,其值取决于某些条件:

if(someConditionIsMet) {
  anotherFunction({ foo: "123"});
} else {
  anotherFunction({ bar: "321"});
}
但有时,如果我在某个地方有一个未定义的变量,我会得到一个未捕获的TypeError:无法读取未定义的属性,程序将根本无法运行

例如,当我调用someFunctionfoobar时,我希望得到一个未捕获的TypeError,因为其中一个变量肯定是未定义的。但是,在这里函数仍然运行


为什么会这样?

未定义的变量正是:变量、名称,您在代码中使用过,但运行时不知道它应该引用什么,因为您从未引入该变量名称

在这里,您清楚地介绍了foo和bar作为函数参数。运行时很清楚这些变量来自何处,它们的作用域是什么,等等。只是它们没有被赋值/它们持有未定义的值。未定义的变量是指突然引用的变量,而没有使用var、let、const或函数参数声明它们。例如:


console.logfoo 许多编程语言的设计原则是,如果一段代码不可能按预期的方式运行,那么尽快发出嘎嘎声比简单地让代码以非预期的方式运行要好。虽然JavaScript的许多方面在这方面没有帮助,但在某些情况下,使用strict方言可以提供帮助


这里描述的情况在这方面尤为重要,因为在非使用严格方言中,试图在未定义的函数中使用变量具有有效的指定含义,因此在有时依赖的外部上下文中创建变量。虽然在某些情况下,使用strict会导致具有一个有效含义的代码具有不同的有效含义,但大多数情况下不会经常出现。如果试图使用未在函数中定义的变量的代码的含义被更改为在该函数中创建变量,则依赖于旧行为的代码将停止工作,而没有任何诊断指示原因。

但有时,如果我在某个地方有一个未定义的变量,请发布产生此错误的代码,而不是working@Bergi我想这也是一个有效的问题,当某些东西起作用时,你不知道它为什么起作用?