【发布时间】:2013-09-27 18:50:22
【问题描述】:
在rosettacode page 上用于归并排序的javaScript 示例具有以下功能:
1 function merge(left,right,arr){
2 var a=0;
3 while(left.length&&right.length)
4 arr[a++]=right[0]<left[0]?right.shift():left.shift();
5 while(left.length)arr[a++]=left.shift();
6 while(right.length)arr[a++]=right.shift();
7 }
谁能解释一下第 4 行发生了什么?
【问题讨论】:
-
你到底有什么不明白的地方?尝试拆分为多行 / 将
?:替换为 if... -
@AlexeiLevenkov 我不熟悉这种语法。有比较
right[0]<left[0],然后是 boolean 结果,其中?被评估为true=right.shift():false=left.shift()。这是正确的吗? -
是的。
?:通常称为“三元运算符”(正式名称“条件运算符”) - 搜索并查看详细信息(在许多语言 JS、C、C++、C#、Java...中的行为相同) -
谢谢@AlexeiLevenkov,因为三个值
(bool, condition1, condition2),它是三元的吗? -
是的 - 类似于二进制 (+,-, *,...) 和一元 (
(-1)中的一元“-”)。见Arity。
标签: javascript syntax semantics mergesort