Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度。定义为与类型_Javascript_Angularjs - Fatal编程技术网

Javascript 角度。定义为与类型

Javascript 角度。定义为与类型,javascript,angularjs,Javascript,Angularjs,此问题特定于命名为isDefined的angular.isDefined()。如果传递给它的变量没有定义,而不是抛出一个未捕获的错误,我们不希望它找到返回false的方法。我正在寻找typeof操作符的角度等价物,以检测未定义的变量。在下面的示例中,x未定义且typeof x不会抛出任何未捕获的引用错误:x未定义错误。如果我使用了angular.isDefined我会已收到未定义的错误 if(typeof x != 'undefined') alert("defined"); el

此问题特定于命名为isDefined的angular.isDefined()。如果传递给它的变量没有定义,而不是抛出一个未捕获的错误,我们不希望它找到返回false的方法。我正在寻找typeof操作符的角度等价物,以检测未定义的变量。在下面的示例中,
x
未定义且
typeof x
不会抛出任何
未捕获的引用错误:x未定义
错误。如果我使用了
angular.isDefined
我会已收到未定义的
错误

 if(typeof x != 'undefined')
     alert("defined");
 else 
      alert("undefined");    
角度.isDefined(x)抛出
未捕获引用错误:如果x未定义,则未定义x

  if(angular.isDefined(x)) // throws error because x is not defined
     alert("defined");
 else 
      alert("undefined"); 

是否有一个角度替代x的类型!='未定义的“。让我解释一下这个场景是如何结束的。我有一个js文件中的
createContext()
函数,我不允许修改它。这个函数定义了
context=“一些有用的东西”
我有两个控制器
commonController
contextController
首先执行
commonController
并注册一个需要访问
context
的自定义事件处理程序。然后
commonController
执行调用
createContext()的操作
。有时甚至在调用
createContext()
之前,根据执行时间而定。eventHadler将被触发,并将尝试访问尚未定义的变量。我不能调用
createContext()
contextController
之外的任何其他地方。isDefined(obj)不能完全替代typeof

定义依据:

这清楚地表明它只是在后端使用typeof,但是引用严格的类型检查(!==不!=)

因此,在您的情况下,typeof工作,而angular.isDefined()不工作

PS:-根据您的要求,您可以使用typeof或angular.isDefined()。

angular.isDefined(obj)不能完全替代typeof

定义依据:

这清楚地表明它只是在后端使用typeof,但是引用严格的类型检查(!==不!=)

因此,在您的情况下,typeof工作,而angular.isDefined()不工作

PS:-根据您的要求,您可以使用typeof或angular.isDefined()。

您的问题“是否存在x的typeof的角度替代方案!='undefined'”没有意义

JavaScript(无论角度如何)的工作方式是,执行以下操作将是一个错误:

function foo(x){ return true; }
foo(a); // this will cause "Uncaught ReferenceError: a is not defined"
Angular的
已定义
与其他函数一样,是一个函数,当使用未声明的变量调用时,会导致错误。

您的问题“是否存在x的
类型的角度替代方法!='undefined'
”没有意义

JavaScript(无论角度如何)的工作方式是,执行以下操作将是一个错误:

function foo(x){ return true; }
foo(a); // this will cause "Uncaught ReferenceError: a is not defined"

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

正如您现在在@squiroid的答案中的注释中所阐明的,您的
canvasDesign
函数如下所示:

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)

正如您现在在@squiroid回答中的评论中所阐明的,您的
画布设计功能如下所示:

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)

不,没有。但我看不出有什么不同的地方,因为变量可能总是会被声明。是的,我有一个场景,其中事件订阅块
$on
中的代码正在访问另一个函数中定义的变量,该函数可能正在执行,但尚未完成执行。@Blackhole有一点不同,我检查了angular的文档。@DivyaMV这是不可能的,JavaScript是单线程的,因此,
上的
$on将在需要访问的代码之前或之后执行。@DivyaMV根据函数是否执行,变量不会进入或超出范围(除非您将属性添加到
窗口
obj