这个问题特定于被命名为angular.isDefined()的isDefined。如果传递给它的变量没有定义,我们不希望它找到返回false的方法,而不是抛出一个未定义的错误。我正在寻找一个角度等效的类型操作符来检测非定义的 variables.In,下面的示例x
不是定义的,typeof x
没有抛出任何Uncaught ReferenceError: x is not defined
error.where,如果我使用angular.isDefined
,我会收到not defined error
。
if(typeof x != 'undefined')
alert("defined");
else
alert("undefined");
如果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");
是否有一个角度上的替代方案来替代typeof x !='undefined'
.Let,我解释我是如何结束这个场景的,我在js文件中有一个js函数,这个函数定义了context="something useful"
,我有两个控制器commonController
和contextController
。commonController
首先被执行,并为一个需要访问context
.then commonController
的自定义均衡器注册,它根据createContext()
之前的执行时间调用createContext()
.sometimes,触发called.the eventHadler,并尝试访问尚未定义的变量。除了在createContext()
之外,我不能在其他任何地方调用contextController
。
发布于 2015-03-20 07:00:32
正如您现在在@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)
。发布于 2015-03-18 10:02:12
angular.isDefined(obj)不是类型的完全替代物。
isDefined根据文档:
function isDefined(value) {return typeof value !== 'undefined';}
它清楚地表示它只是在后端使用type on,但是引用严格的类型检查(!== not !=)。
因此,在您的示例中,类型是有效的,而angular.isDefined()则不行。
PS:-取决于您的需求,您可以使用typeof或angular.isDefined()。
发布于 2015-03-19 19:44:32
你的问题“有一个角度上的替代typeof x !='undefined'
”是没有意义的。
JavaScript (不考虑角度)的工作方式是,执行以下操作将是错误的:
function foo(x){ return true; }
foo(a); // this will cause "Uncaught ReferenceError: a is not defined"
isDefined
是一个函数,与任何其他函数一样,当使用未声明的变量调用时,会导致错误。
https://stackoverflow.com/questions/29118736
复制相似问题