0

如果变量foo未定义,通常我可以执行以下操作:

!foo;
foo === undefined;
foo !== 'some value';

但是,我现在正在处理的代码库中有一些东西似乎指示浏览器的解释器对除此之外的未定义变量的任何操作抛出异常:

typeof foo !="undefined";

我正在使用通常使用的浏览器(Chrome 和 Firefox)。但这次我将在中间进行这个项目,而不是从头开始。这是一个使用 Backbone.js、下划线、车把、jQuery、yepnope 的 dJango 项目。

这种行为可能是由于指令"use strict"出现在全局命名空间中的某处吗?我在项目中搜索了文本字符串“use strict”,并在一些似乎来自 twitter 的代码中找到了它:

    文件:bootstrap.js
           脚本.js
    来自:http://twitter.github.com/bootstrap/javascript.html#transitions

我还在 json2 文件中找到了它。但是我很确定这个文件在我上次使用它时没有给我带来问题:

    文件:json2.js
    来自:http://www.JSON.org/json2.js

据我所知,这甚至不是由在某处包含“使用严格”引起的......

有任何想法吗?

非常感谢!

4

2 回答 2

2

未声明变量时,不能在比较中使用它。

undeclaredvar = 1;

是唯一有效的:undeclaredvar在全局命名空间中隐式声明。

函数内部的严格模式声明永远不会“泄露”全局范围的严格性。因此,"use strict";在 Twitter bootstrap / JSON2 中不会影响脚本的严格性。

于 2012-07-23T17:54:56.293 回答
1

undefinedundeclared之间有一个重要的区别。

function test() {
    var foo;
    if (foo) { /* not executed */ }
}

这很好,因为foo已声明,但其值为undefined

function test() {
    if (foo) { /* exception! */ }
}

这将引发异常 ( ReferenceError),因为foo声明。(除非有一个window.foo。)

于 2012-07-23T17:57:49.780 回答