2012-05-27 36 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)