在javascript中,新函数是否可以返回NULL?

时间:2011-07-19 11:51:15

标签: javascript object null

函数可以返回null,但是函数的new实例有没有办法返回null?

例如,在这个愚蠢的代码中(严格来说是为了说明)

var f = function(j) { if( j > 5 ) return null; this.j = j; };
for( var f1=f(1); f1; f1=f(fi.j) ) {
   ...
}

代码不做的是让new f()返回null - 似乎只有new返回值被丢弃。 new f()除了__proto__之外没有任何其他内容,但拒绝让自己无效。

是寻找一个无法回归的“对象”的合理选择吗?如果是这样,事先不知道“对象”看起来是什么样的,那么最好的测试方法是什么?


溶液:

考虑到javascript的new不能失败 - 它必须返回一个对象并且不能返回null(请参阅下面的答案!),imho是完成该示例的正确方法:

var F = function(i) { if( i > 5 ) throw( 'tooMuch' ); this.i = i; }
try { 
   for( var f = new F(1); true; f = new F(f.i) ) {
      ...
   }
} catch( er ) { null; }

这使用throw/catch进行循环控制 - 不是我的一杯茶,但是iterators上的新javascript规范使用了相同的机制,所以我可能需要自己思考“thow例外“,不是”thow errors“。

2 个答案:

答案 0 :(得分:3)

ou CAN 返回 自己的对象 ,而不是new给出的对象 - 但请记住它必须是一个对象 - null不会 - 但具有讽刺意味的是typeof null也是object

function F(x) {
  if (x < 10) return new Number(0);

  this.x = x;
}

现在你可以做你的事了......

for ( var i = 1, k = new F(i); k; k = new F(++i) ) {
  // dance .~.~.~.
}

答案 1 :(得分:1)

new F返回一个对象。

null是一个值而不是一个对象。

你不能这样做