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

以下代码能正常工作 :

Array.prototype.filter = function(iterator) {

var ret = [];

for(var i in this) {

iterator(this[i])? ret.push(this[i]): {};

}

return ret;

  }

为什么以下代码不能工作:

 

Array.prototype.filter = function(iterator) {

var ret = [];

 

for(var i in this) {

iterator(this[i])? ret.push(this[i]): ;

}

return ret;

  }

他们唯一的区别就是:

iterator(this[i])? ret.push(this[i]): {}; 被替换成了 iterator(this[i])? ret.push(this[i]): ;

 MDC对条件表达式参数的解释是:

 condition : 可以被计算成true或者false的表达式。

 expr1,expr2:可以返回任何类型值的表达式。

 可见后两个表达式要有返回值,显然空语句是不会有返回值的,而为什么把空语句替换成{}就能正常工作了呢?可能的原因是{}声名了一个空对象,初始化为undefined,所有{}是有值的,符合MDC的说明,说以能正常运行。

 

 

Document Tags and Contributors

Tags: 
 Contributors to this page: Xingxing.Xu, Admin
 Last updated by: Xingxing.Xu,