我读到了不同语言中的三元操作符,并在Javascript部分注意到了一些有趣的东西。http://en.wikipedia.org/wiki/%3F:#JavaScript
JavaScript中的条件运算符具有与其他BCPL派生的变体相同的语法和优先级结构,但在语义上存在显著差异:它返回一个L值。
第一句说,javascript中三元的返回是一个lvalue,所以我尝试了一些例子,结果很奇怪(在chrome控制台中)。
给予:
var a = { 'yo' : 'momma' }
var b = { 'yo' : 'cool' }
var bool = true
(bool? a : b).yo = 'LLJ'
//a is now { 'yo' : 'LLJ' }
(bool? a.yo : b.yo) = 'LLJ' //throws a reference error为什么第一次成功,第二次失败?(从逻辑上讲,它们是相同的陈述,不是吗?)
发布于 2013-09-07 02:20:31
维基百科错了。条件运算符返回r值,而不是l值.
这篇文章的历史非常有趣,所以我在这里总结一下:
发布于 2013-09-07 00:55:32
因为第二行不是引用a.yo或b.yo的值,所以它引用了一个平面对象。
第一个表达式以.yo结尾,因此它知道引用a或b的值。
发布于 2013-09-07 00:58:28
与js的实际实现有关,我猜.但想想这个..。(bool?给出a,使代码变为a.yo = 'LLJ',这是有效的。(bool?a.yo : b.yo)给出了a.yo所持有的字符串。实际上,你在做'moma‘= 'LLJ’,这是无效的。
https://stackoverflow.com/questions/18668599
复制相似问题