Compare Revisions

为什么条件表达式的后两个表达式都不能为空?

Change Revisions

Revision 133502:

Revision 133502 by Xingxing.Xu on

Revision 133503:

Revision 133503 by Xingxing.Xu on

Title:
为什么条件表达式的后两个表达式都不能为空?
为什么条件表达式的后两个表达式都不能为空?
Slug:
User:Xingxing.Xu
User:Xingxing.Xu
Tags:
JavaScript
JavaScript
Content:

Revision 133502
Revision 133503
n8      &nbsp;Array.prototype.filter = function(iterator) {n8      <span style="color: rgb(51, 153, 102);">以下代码能正常工作 :</span>
nn11      <code>Array.prototype.filter = function(iterator) {</code>
12    </p>
13    <p style="margin-left: 40px;">
11      <span style="background-color: rgb(192, 192, 192);">var ret14      <code><span style="background-color: rgb(255, 255, 255);"><
> = [];</span>>span>var ret = [];<br></span></span></code>
15    </p>
16    <p style="margin-left: 40px;">
17      <code><span style="background-color: rgb(255, 255, 255);"><
 >span>for(var i in this) {</span></span></code>
18    </p>
19    <p style="margin-left: 40px;">
20      <code><span style="background-color: rgb(255, 255, 255);"><
 >span>iterator(this[i])? ret.push(this[i]): {};</span></span></cod
 >e>
21    </p>
22    <p style="margin-left: 40px;">
23      <code><span style="background-color: rgb(255, 255, 255);"><
 >span>}</span></span></code>
24    </p>
25    <p style="margin-left: 40px;">
26      <code><span style="background-color: rgb(255, 255, 255);"><
 >span>return ret;</span></span></code>
n14      <span style="background-color: rgb(192, 192, 192);"><br></sn29      <code><span style="background-color: rgb(255, 255, 255);"><
>pan>>span>&nbsp;&nbsp;}</span></span></code>
n17      <span style="background-color: rgb(192, 192, 192);">for(varn32      为什么以下代码不能工作:
> i in this) {</span> 
n20      <span style="background-color: rgb(192, 192, 192);">iteraton35      &nbsp;
>r(this[i])? ret.push(this[i]): {};</span> 
n23      <span style="background-color: rgb(192, 192, 192);">}</spann38      Array.prototype.filter = function(iterator) {
>> 
n26      <span style="background-color: rgb(192, 192, 192);">return n41      var ret = [];
>ret;</span> 
n29      <span style="background-color: rgb(192, 192, 192);">&nbsp;&n44      &nbsp;
>nbsp;}</span> 
tt47      for(var i in this) {
48    </p>
49    <p>
50      iterator(this[i])? ret.push(this[i]): ;
51    </p>
52    <p>
53      }
54    </p>
55    <p>
56      return ret;
57    </p>
58    <p>
59      &nbsp;&nbsp;}
60    </p>
61    <p>
62      他们唯一的区别就是:
63    </p>
64    <div class="warning">
65      iterator(this[i])? ret.push(this[i]): {}; 被替换成了&nbsp;iterat
 >or(this[i])? ret.push(this[i]): ;
66    </div>
67    <p>
32      <span style="background-color: rgb(192, 192, 192);">&nbsp;<68      <span style="background-color: rgb(255, 255, 255);"><span>&
>/span>>nbsp;MDC对条件表达式参数的解释是:</span></span>
69    </p>
70    <p>
71      &nbsp;condition : 可以被计算成true或者false的表达式。
72    </p>
73    <p>
74      &nbsp;expr1,expr2:可以返回任何类型值的表达式。
75    </p>
76    <p>
77      &nbsp;可见后两个表达式要有返回值,显然空语句是不会有返回值的,而为什么把空语句替换成{}就能正常工作了呢?可能的
 >原因是{}声名了一个空对象,初始化为undefined,所有{}是有值的,符合MDC的说明,说以能正常运行。
78    </p>
79    <p>
80      &nbsp;

Back to History