3

如何检查函数参数是否未定义?

procedure Test(aValue: TObject);
begin
  if aValue <> nil then
    ShowMessage('param filled')      <-- also when Test() is executed!
  else
    ShowMessage('no param filled')   <-- not called, only when Test(nil) is called
end;

但是当这个函数在没有参数的纯 JS 中调用时,aValue = undefined,但是 <> nil 检查被转换为 == null!

例如,当你有一个带有回调的 JS 函数时:

type
  TObjectProcedure = procedure(aValue: TObject);

procedure FetchUrlAsync(aUrl: string; aCallback: TObjectProcedure )
begin
  asm
    $().load(@aUrl, @aCallback);
  end;
end;

您可以使用以下命令调用此函数:

FetchUrlAsync('ajax/test.html', Test);

现在是否使用参数调用“测试”取决于 jQuery。

4

2 回答 2

4

在下一个版本中,您将能够使用Defined()特殊函数,它将对 undefined 进行严格检查(对于 null 值,它将返回 true)。

if Defined(aValue) then
   ...

在当前版本中,您可以定义一个函数来检查

function IsDefined(aValue : TObject);
begin
   asm
      @result = (@aValue!==undefined);
   end;
end;
于 2012-05-23T06:23:32.440 回答
0

在当前版本 (1.0) 中,您可以使用函数 varIsValidRef() 检查值是否未定义。该函数是 w3system.pas 的一部分,因此它始终存在。它看起来像这样:

function varIsValidRef(const aRef:Variant):Boolean;
begin
  asm
    if (@aRef == null) return false;
    if (@aRef == undefined) return false;
    return true;
  end;
end;

这会检查 null 和 undefined ,因此您也可以将它用于对象引用(THandle 类型是变体)。

于 2012-06-06T16:27:10.740 回答