2

我知道我很可能在吹毛求疵,但是......我有以下代码:

var book;
var i=0;

i = 300;    
book = new CBook();
book.Title = "blahblah";
book.Contents = "lalalala";


function CBook() {
    this.Title = "";
    this.Contents = "";
}

现在我的问题是:

有会更好吗

var book = {};

代替

var book;

在第一个版本中 typeof(book) 在赋值之前返回 undefined book = new CBook();

提前致谢

4

2 回答 2

12

有会更好吗

var book = {};

不,有几个原因:

  1. 您将创建一个对象只是为了在book = new Book(...)稍后将其丢弃。(当然,一个非常好的JavaScript 引擎可能会意识到这一点并对其进行优化。但仍然......)

  2. 如果您使用工具,您将积极阻止它们在您(正确)初始化它之前lint警告您尝试使用它。book

  3. 如果由于某种原因您的代码中有逻辑需要检查您是否已经分配了一本书,那么您将失去这样做的能力。通过保留变量的默认undefined值,该检查可以是if (!book) { /* Not assigned yet */ }. (当然,幼稚的 lint 工具也可能会警告您。)

#2也适用于= 0in var i = 0;

但是,如果您对book在声明中进行初始化有强烈的感觉,那null可能是一个更好的选择。

于 2013-07-13T18:10:06.863 回答
2

变量应在最接近其首次使用时声明。所以,如果我是你,我会改为:

var book = new CBook();

另外,我会将参数传递给 CBook 并将其用作构造函数:

var book = new CBook("blahblah", "lalalala");

function CBook(title, contents) {
   this.title = title;
   this.contents = contents;
}
于 2013-07-13T18:05:01.433 回答