2012-05-27 62 views
4

錯誤推出時,這條線被評爲:「無效的左手側分配」的樣式屬性分配

color && el.style.color = color; 

這是怎麼回事? DOM級別2屬性現在是「只讀」嗎?

+0

最後一行似乎是創建問題http://jsfiddle.net/dhirajbodicherla/98SCK/ – Dhiraj

+0

我知道這一點,謝謝 –

+0

請使用'if(color)'而不是'color &&'。把事情縮短很好,但如果降低可讀性甚至引入問題則不會。編輯:+1因爲你意識到'如果'你自己更好! – ThiefMaster

回答

6

問題是precedence,你需要的括號:

function log(msg, color) { 
    var el = document.createElement('p'); 
    el.innerText = msg; 
    document.getElementById('log').appendChild(el); 
    color && (el.style.color = color); 
} 

&&=等更高的優先級無你最終試圖分配一個表達式(例如,它有效地讀取(color && el.style.color) = color;),這當然是你不能做的。

+0

謝謝,我想補充一點:人們也可以把這個任務放到一個閉包中來解決這個問題,這並不是首選(過度使用閉包會導致調用層次機制)。 –

+1

@EliranMalka:大聲笑,是的,你可以這樣做。相當昂貴的括號形式。或者當然,你可以使用'if',因爲你不再保存這兩個字符... ;-) –

+1

不錯,我想我更喜歡舊的'如果'...有人必須閱讀這有點:)謝謝一堆! –

0

我同意馬克·萊納斯,雖然你也可以在你的代碼重寫

color && (el.style.color = color)