首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript三元运算符lvalue

Javascript三元运算符lvalue
EN

Stack Overflow用户
提问于 2013-09-07 00:51:48
回答 4查看 11.3K关注 0票数 10

我读到了不同语言中的三元操作符,并在Javascript部分注意到了一些有趣的东西。http://en.wikipedia.org/wiki/%3F:#JavaScript

JavaScript中的条件运算符具有与其他BCPL派生的变体相同的语法和优先级结构,但在语义上存在显著差异:它返回一个L值

第一句说,javascript中三元的返回是一个lvalue,所以我尝试了一些例子,结果很奇怪(在chrome控制台中)。

给予:

代码语言:javascript
复制
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

为什么第一次成功,第二次失败?(从逻辑上讲,它们是相同的陈述,不是吗?)

EN

回答 4

Stack Overflow用户

发布于 2013-09-07 02:20:31

维基百科错了。条件运算符返回r值,而不是l值.

这篇文章的历史非常有趣,所以我在这里总结一下:

  • 2010年8月30日开始 创建了JavaScript部分。正确地说,在JavaScript中,三元操作符返回r值,但错误地说,在C/C++/Java中,它返回l值。只有在C++中,三元运算符才返回l-值.
  • 2011年1月31日不能在C中生成l值。 C正确地从JavaScript部分删除,因为它不返回l-值。爪哇还在。
  • 2011年2月15日“更正” 与Java和C++的比较被移除(注释正确地说Java从未产生l值),但是哦,不!JavaScript突然返回一个l值!
  • 2011年3月7日希望恢复了. 不正确的“l-值”改为“值”,链接到价值物品 (它同时描述l-值和r-值)。
  • 2011年3月7日...but for 将链接文本更改为"l-value“。
  • 2013年9月7日:为94重量级澳航欢呼三声 由于这个问题,维基百科已经被纠正了。
票数 4
EN

Stack Overflow用户

发布于 2013-09-07 00:55:32

因为第二行不是引用a.yob.yo的值,所以它引用了一个平面对象。

第一个表达式以.yo结尾,因此它知道引用ab的值。

票数 3
EN

Stack Overflow用户

发布于 2013-09-07 00:58:28

与js的实际实现有关,我猜.但想想这个..。(bool?给出a,使代码变为a.yo = 'LLJ',这是有效的。(bool?a.yo : b.yo)给出了a.yo所持有的字符串。实际上,你在做'moma‘= 'LLJ’,这是无效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18668599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档