1

当我发现可以使用以下语法创建变量时,我对 JavaScript 很陌生,并且正在使用它:

document.foo = 'bar'.

据我所知,它的优势在于,当我执行以下操作时:

if (document.foo)
     do something;

如果变量尚未启动,解释器不会抛出异常。

我不知道但想知道的是,创建这样的变量的术语是什么。它只是全局变量,还是成员变量,还是新类型。我还想知道是否有任何理由我不想以这种方式创建变量。

因此,任何希望提供大师建议的人,将不胜感激。

4

2 回答 2

1

在 Javascript 中,有primitive诸如数字、字符串和布尔值之类的值。Javascript 中的其他所有内容都是object.

对象可能具有属性,例如,my_array.length并且它们可能具有方法,例如my_array.pop().

在 Javascript 中,可以相当自由地添加方法和属性,几乎没有例外。

现在——问题来了——

native objectsJavascript 环境本身提供的,例如,Object等等。ArrayNumber

然后host objects是运行Javascript的系统提供的。在浏览器中,宿主对象包括document一些可能的其他对象。

胡闹host object可能会失败——所有的赌注都没有了。在非常标准化和公开的方式之外与它们混淆被认为是非常糟糕的做法。

老实说,只是var你的变量。如果需要,您可以创建某种options变量,并在其中自由更改属性......像这样:

var options = {};

options.foobar = true;

if (options.foobar) {
  alert("You have chosen a Foobar! Congrats");
}

if (!options.fizzban) {
  alert("You have not chosen to play cards with Captain Kirk");
}
于 2012-09-15T19:19:35.447 回答
0

简短的回答:该术语是隐式声明。

有点臃肿的答案:虽然以这种方式创建变量是完全合法的,但在应用于面向对象编程和记录软件的能力时存在一些缺点。

如果您的对象在运行时具有不同的结构配置,那么您的软件状态可能会变得非常难以预测,并且维护代码变得越来越难。

我的建议是:使用某种继承模型或利用 javascripts 原型架构提前声明(并设置明智的默认值!)。这使得文档更容易,也提供了一个机会来审查你的软件目的的心智模型。

john resig 对 JS 继承的应用进行了很好的介绍:http: //ejohn.org/blog/simple-javascript-inheritance/

于 2012-09-15T19:23:37.257 回答