2016-04-02 78 views
0

該代碼可與WHITESPACE_ONLY選項一起使用。但在ADVANCED模式下,點符號不起作用。但括號表示仍然有效。無法使用點符號獲得值

這裏是JSON對象:

{ 
    'title' : 'The title', 
    'type' : 'SIM', 
    'description' : 'Build your own description.', 
    'iconclass' : goog.getCssName('img-icons-bs') 
} 

下面是代碼:

console.log('this.obj_ = ' + JSON.stringify(this.obj_)); 
console.log('this.obj_.iconclass = ' + this.obj_.iconclass); 
console.log('this.obj_[iconclass] = ' + this.obj_['iconclass']); 

輸出:

> this.obj_ = {"title":"The title","type":"SIM","description":"Build 
> your own description.","iconclass":"img-icons-r"} 
> this.obj_.iconclass = undefined 
> this.obj_[iconclass] = img-icons-r 

問題出在哪裏?

+0

如果你再試一次,你還能得到嗎?你有沒有檢查過錯別字,甚至是像'.iconClass'這樣的情況變化? – SmokeyPHP

+0

@SmokeyPHP,是的,我檢查過了。 – Vadim

回答

1

確保您understand the differences between the compilation modes

在ADVANCED_OPTIMIZATIONS中,closure-compiler重命名由虛線表示法引用的屬性,並且不使用帶引號的表示法重命名屬性。例如:

原始

var foo = {}; 
foo.bar = foo['bar'] = 47; 

編譯

var a = {}; 
a.b = a.bar = 47; 

由於JSON對象屬性是從編譯器隱藏,你必須使用帶引號的符號訪問它們。

// This line is incorrect - the compiler can rename '.iconclass' 
console.log('this.obj_.iconclass = ' + this.obj_.iconclass); 

// This line is correct - ["iconclass"] is safe from renaming. 
console.log('this.obj_[iconclass] = ' + this.obj_['iconclass']); 
+0

謝謝Chad。我現在明白什麼是錯的。 – Vadim

0

它正在返回未定義的行,因爲您從未定義過game。再次檢查輸出。你讀了它錯誤的方式。

console.log('this.obj_[iconclass] = ' + this.game_['iconclass']); 

如果更改線以下,將兩個支架和點符號的工作:

console.log('this.obj_.iconclass = ' + this.obj_.iconclass); 
console.log('this.obj_[iconclass] = ' + this.obj_['iconclass']); 

enter image description here

+0

game_是拼寫錯誤。本來它的obj_。問題依然存在。 – Vadim

+0

適合我。看附件截圖 –