通常状况下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