我知道我很可能是挑剔但是...我有以下代码:
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 = new CBook();
提前致谢
答案 0 :(得分:12)
最好有
var book = {};
不,原因有两个:
您将创建一个对象,以便稍后执行book = new Book(...)
时将其丢弃。 (当然,一个非常好的 JavaScript引擎可能会意识到并优化它。但仍然......)
如果您使用lint
工具,则会在您(正确)初始化之前主动阻止他们警告您尝试使用book
。
如果由于某种原因你的代码中有逻辑需要检查你是否已经分配了一本书,那么你就失去了这样做的能力。通过将变量保留为其默认undefined
值,该检查可以是if (!book) { /* Not assigned yet */ }
。 (当然,天真的lint工具也可能会警告你。)
#2也适用于= 0
中的var i = 0;
。
但如果您对宣言中初始化book
感到强烈,那么null
可能是更好的选择。
答案 1 :(得分:2)
变量应声明最接近其首次使用。所以,如果我是你,我会改为:
var book = new CBook();
另外,我会将参数传递给CBook并将其用作构造函数:
var book = new CBook("blahblah", "lalalala");
function CBook(title, contents) {
this.title = title;
this.contents = contents;
}