2011-04-08 80 views
2
////Creating Object 
    var Obj; 

    // init Object 
    Obj= {}; 
  1. 什麼是這些 兩者之間的區別?
  2. 是否有可能使它成爲 單行?
  3. 像這樣使用任何優點?

回答

7

所述第一聲明變量在當前作用域中,它不會爲其分配任何值,因此它不會創建任何對象,而第二個創建的空對象文字可以通過全局變量Obj來引用。
有兩個主要區別:範圍變量和初始化與聲明。
ex:

var Obj; 
alert(typeof Obj);//='undefined' 

//scoping : 
function foo(){ 
    obj1 = {}; 
    var obj2 = {}; 
} 
alert(typeof obj1);//='object' 
alert(typeof obj2);//='undefined' 
// obj2 is visible only in the foo function scope,while 
// obj1 is being attached to the global scope, the window object 
// you can access obj1 as window.obj1 too 
0

如果這就是你所得到的代碼,也絕對這之間沒有什麼區別:和

var Obj; 
Obj = {}; 

這樣的:

var Obj = {}; 

,如果這就是你所得到的代碼,在修改Obj變量之間沒有任何內容。事實上,我認爲做這件事的第二種方式會比上面兩行更快。

+0

對我來說太快了! :) – 2011-04-08 14:23:32

+0

更新了代碼...現在檢查 – theJava 2011-04-08 14:24:53

+0

我在那裏看到它。是的,你完全可以將它們組合成一條線,我建議這樣做。 – Groovetrain 2011-04-08 14:26:02

1

也許我沒有完全理解你的問題,但是...

var Obj= {}; 

是完全的罰款。

1

第一個爲變量Obj分配插槽,但將其保留爲未定義。第二個將新創建的對象綁定到名稱Obj

您可以在一行內完成:var Obj = {};。分兩步做並沒有真正的好處,只有風險。

+0

更新了代碼...現在檢查 – theJava 2011-04-08 14:25:56

1
var Obj; 

這不是創建對象。它定義了一個變量;

對象首先被創建並且被初始化,所以這是兩個關鍵的過程,它們都需要有一個對象。

6

var Obj;創建一個對象,它是聲明可變Obj

Obj = {};初始化可變Obj一個空對象。

當然,你可以一氣呵成結合起來,並做到這一點:

var Obj = {}; 

你基本上只需要單獨的聲明和初始化,如果要初始化與不同的值變量,基於某種條件或如果變量應該在另一個範圍內聲明。例如:

var Obj; 

if(something) { 
    Obj = 'me'; 
else { 
    Obj = 'you'; 
} 
+0

更新了代碼...現在檢查 – theJava 2011-04-08 14:24:13

+0

@theJava:仍然一樣,只是名稱改變了;) – 2011-04-08 14:25:06

1

此行實際上並不創建對象。相反,它會創建一個變量(或者一個可以容納一個對象的地方,如果你把它放在那裏的話)。

var Obj; 

此行確實創建了一個對象並將其放入變量中。

Obj = {}; 

此行通過創建屬性並將其設置爲某個對象來「初始化」對象。

Obj.Something = null; 
1

注意,說

無功的OBJ;

你是不是創建對象,僅僅定義(在本地函數範圍)變量最初設置爲null

除此之外,有沒有區別,你是否將其合併爲一個語句或不。

+0

實際上,值不是'null',而是'undefined'。 – 2011-04-08 14:30:08

2

var Obj;確實不是創建一個對象,它聲明一個變量。

Obj = {};將一個空對象分配給名爲Obj的變量。如果以前未聲明Obj,則由於缺少var關鍵字(不這樣做),因此這會隱式地在全局範圍內聲明該變量。

2
var Obj; 

聲明Obj變量,而

var Obj = {}; 

聲明和初始化Obj變量作爲一個空對象。

請確保您也瞭解在這裏使用var關鍵字。它可以用於聲明和/或初始化變量。

Obj = {}; 

var Obj = {}; 

之間的區別是,var稀少代碼在全局命名空間(通常被認爲是一種不好的做法)初始化Obj


TL; DR:在大多數情況下,最好是初始化,並在在局部範圍內,同時聲明,使用var關鍵字:

var Obj = {};