日期:2014-05-16  浏览次数:20370 次

js中三元运算符用作流程控制
通常状况下js的三元运算符用作判断与返回值、形式如下
var result = (username == 'star') ? 'star' : 'moon';

如果用在流程控制中,试想如下操作:

 /*判断语句*/ ? /*语句一*/ :/*语句二*/;

通常的写法是
 (username == 'star') ? document.write("im star") :document.write ("im moon"); 

ok,再变态一点的
 /*判断语句*/ ? /*语句块一*/ :/*语句块二*/;

如果我们写作:
 (username == 'star') ? document.write("im star");alert(1) :document.write ("im moon"); 

这样是会报错的,首先,那个';'会破坏 ?:语句。
如果写作
 (username == 'star') ? (document.write("im star");alert(1)):document.write ("im moon"); 

是不可以的。

最后我想到了eval
 (username == 'star') ?eval('document.write("im star");alert(1);'):document.write ("im moon"); 

ok,这样javascript就可以用三元操作符作流程控制了,但是需要注意,在eval中不要出现break;return等中断运算符,这样对?后面的第一个式子相当于没有常规结束,不会产生返回值,会在操作台报错的。
Uncaught SyntaxError: Illegal break statement
Uncaught SyntaxError: Illegal return statement