首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >angular.isDefined与类型

angular.isDefined与类型
EN

Stack Overflow用户
提问于 2015-03-18 09:47:58
回答 3查看 7.5K关注 0票数 0

这个问题特定于被命名为angular.isDefined()的isDefined。如果传递给它的变量没有定义,我们不希望它找到返回false的方法,而不是抛出一个未定义的错误。我正在寻找一个角度等效的类型操作符来检测非定义的 variables.In,下面的示例x不是定义的typeof x没有抛出任何Uncaught ReferenceError: x is not defined error.where,如果我使用angular.isDefined,我会收到not defined error

代码语言:javascript
运行
复制
 if(typeof x != 'undefined')
     alert("defined");
 else 
      alert("undefined");    

如果x不是定义的,则抛出Uncaught ReferenceError: x is not defined

代码语言:javascript
运行
复制
  if(angular.isDefined(x)) // throws error because x is not defined
     alert("defined");
 else 
      alert("undefined"); 
代码语言:javascript
运行
复制
     var x;
      if(angular.isDefined(x)) // does not throw error as x is defined though not **initialiased** 
         alert("defined");
      else 
         alert("undefined"); 

是否有一个角度上的替代方案来替代typeof x !='undefined'.Let,我解释我是如何结束这个场景的,我在js文件中有一个js函数,这个函数定义了context="something useful",我有两个控制器commonControllercontextControllercommonController首先被执行,并为一个需要访问context .then commonController的自定义均衡器注册,它根据createContext()之前的执行时间调用createContext() .sometimes,触发called.the eventHadler,并尝试访问尚未定义的变量。除了在createContext()之外,我不能在其他任何地方调用contextController

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-20 07:00:32

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

代码语言:javascript
运行
复制
canvasDesign = function() { 
    var canvas1 = document.getElementById("canvas1"); 
    if(canvas1 != null) context1 = canvas1.getContext('2d');
}

该函数正在创建一个隐式全局变量 (因为它没有在context1上使用var )。

这是一种糟糕的做法,在ES5严格模式下是禁止的,正确的做法是修复代码以停止使用反实践。如果这不是一个选项,您最好的选择是继续使用typeof context1 === 'undefined'。正如这个问题所阐明的,不可能创建一个通用函数来检查变量是否存在。

另外两种选择:

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

Stack Overflow用户

发布于 2015-03-18 10:02:12

angular.isDefined(obj)不是类型的完全替代物。

isDefined根据文档

代码语言:javascript
运行
复制
function isDefined(value) {return typeof value !== 'undefined';}

它清楚地表示它只是在后端使用type on,但是引用严格的类型检查(!== not !=)。

因此,在您的示例中,类型是有效的,而angular.isDefined()则不行。

PS:-取决于您的需求,您可以使用typeof或angular.isDefined()。

票数 2
EN

Stack Overflow用户

发布于 2015-03-19 19:44:32

你的问题“有一个角度上的替代typeof x !='undefined'”是没有意义的。

JavaScript (不考虑角度)的工作方式是,执行以下操作将是错误的:

代码语言:javascript
运行
复制
function foo(x){ return true; }
foo(a); // this will cause "Uncaught ReferenceError: a is not defined"

isDefined是一个函数,与任何其他函数一样,当使用未声明的变量调用时,会导致错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29118736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档