JavaScript 正在将字符串转换为字符串并导致错误

JavaScript is converting a String to a String and causing an error

我有一个带有一些嵌入式 JS 的 Delphi 应用程序。我有一个函数

function PlaceRecords(Lat, Lang, RecordNum, Dist, IconNo){
    var latlng = new google.maps.LatLng(Lat,Lang);
    PutMarker(IconNo, Lat, Lang, "Record " + RecordNum + " at "  +Dist + " miles");
}

只要RecordNum中没有同一个字母。我将所有参数作为字符串传递,但出于某种原因,JS 想要将 RecordNum 转换为数字。我怎么能抑制这个。使用 IE 8.

嗯(根据你对我的评论的回复),如果你能看到你的代码正在生成 Javascript,它看起来像这样:

PlaceRecords(45.5262404, -122.6810841, A51210876, 123, 456);

现在你看到问题了吗?

您可能从一堆字符串开始,但您没有将它们用引号括起来,所以 Javascript 不认为它们是字符串。 51210876 之所以有效,是因为它是一个数字——即使您将它放在引号中,Javascript 也会对其进行几乎相同的处理。但与大多数语言一样(我已经将近 30 年没有编写 Pascal,但我确信它是一样的),A51210876 将被视为标识符名称而不是值,因为它以 alpha 开头字符.

假设你可以自由地将双引号放在单引号内,我建议你尝试这样的事情:

procedure TfrmMain.PlaceRecords(Lat,Lon,RecordNum, Dist:string; IconNo:integer);
begin
    HTMLWindow2.execScript(Format(
        'PlaceRecords(%s, %s, "%s", "%s", "%s")',
        [Lat,Lon, RecordNum, Dist, IntToStr(IconNo)]),
        'JavaScript'
    );
end;

我知道 lats 和 longs 是数字,所以我没有将它们放在引号中。我不知道最后两个参数包含什么样的数据,所以我也把它们放在引号中。我想您可能会将它们全部放在引号中,因为任何 Javascript 行下期望数字 "should" 的行都确保该值实际上被视为数字。

注意在Javascript中,字符串可以用单引号或双引号括起来,在这种时候很方便。