gpt4 book ai didi

javascript - angular.isDefined 与 typeof

转载 作者:行者123 更新时间:2023-11-28 12:25:41 27 4
gpt4 key购买 nike

这个问题特定于 angular.isDefined() 被命名为 isDefined。如果传递给它的变量未定义,我们不期望它找到返回 false 的方法,而不是抛出 Uncaught Error 。我正在寻找 typeof 运算符的 Angular 等效项来检测 undefined variable 。在下面的示例中,x 不是定义的且 typeof x 不会抛出任何 Uncaught ReferenceError: x is not Defined 错误。如果我使用了 angular.isDefined 我会收到一个 未定义错误

 if(typeof x != 'undefined')
alert("defined");
else
alert("undefined");

angular.isDefined(x) 如果 x 未定义,则抛出 Uncaught ReferenceError: x is not Defined

  if(angular.isDefined(x)) // throws error because x is not defined
alert("defined");
else
alert("undefined");
<小时/>
     var x;
if(angular.isDefined(x)) // does not throw error as x is defined though not **initialiased**
alert("defined");
else
alert("undefined");

是否有一个 Angular 替代 typeof x !='undefined'。让我解释一下我是如何结束这种情况的。我有 createContext() 函数一个我不允许修改的js文件。这个函数定义了context="somethingUsed"并且我有两个 Controller commonControllercontextController .commonController 首先执行并注册需要访问 context 的自定义事件处理程序。然后 commonController 执行,调用 createContext() 。有时甚至在调用 createContext() 之前取决于执行时间。eventHadler 被触发并会尝试访问尚 undefined variable 。除了 contextController 之外,我无法在其他任何地方调用 createContext()

最佳答案

正如您现在在 @squiroid 的答案中的注释中所澄清的那样,您的 canvasDesign 函数如下所示:

canvasDesign = function() { 
var canvas1 = document.getElementById("canvas1");
if(canvas1 != null) context1 = canvas1.getContext('2d');
}

该函数正在创建一个 implicit global variable (因为它没有在 context1 上使用 var)。

这是一种不好的做法,在 ES5 严格模式下是禁止的,正确的做法是修复代码以停止使用反做法。如果这不是一个选项,那么最好的选择是继续使用 typeof context1 === 'undefined'。如this question澄清一下,不可能创建一个通用函数来检查变量是否存在。

另外两个选项:

  • 使用angular.isDefined(window.context1)。这将允许您检查全局变量而不会引发错误,但如果在某个时刻该变量变为非全局变量,则此方法将会中断。
  • var context1; 放在文件顶部、任何函数之外。这将确保至少声明该变量,并允许您安全地调用 angular.isDefined(context1)

关于javascript - angular.isDefined 与 typeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com