【问题标题】:Simple JavaScript object comparison简单的 JavaScript 对象比较
【发布时间】:2011-09-12 20:08:57
【问题描述】:

我正在尝试将一个简单的字符串传递给事件侦听器,以识别要修改的适当数组对象。我通过查看日志(以 cmets 显示)了解到我传递的是一个对象,它不能直接与另一个对象的属性进行比较。

我应该传递一个具有字符串作为属性的对象(就像数组对象那样),还是有更合适的方法来引用该对象作为字符串或以某种方式调用它的名称(就像日志在第一个评论)?

// I just want to pass a string as an argument. Here is a static example.
var timestampID = '1307740835264';
Ti.App.fireEvent('confirmation',timestampID);

注意第一个日志输出如何将参数解释为字符串,但 if 比较将其识别为对象。

Ti.App.addEventListener('confirmation',function(timestampID) { // produces "[DEBUG] fire app event: confirmation with 1307740835264"
    Ti.API.info(timestampID); // produces "[INFO] { type = confirmation; }"
    for (i=0;i<myArray.length;i++) {
        Ti.API.info(myArray[i].timestampID + ' | ' + timestampID); // produces "[INFO] 1307740835264 | [object Object]"
        if (myArray[i].timestampID == timestampID) { // will produce false
            // will never happen
        }
    }
});

谢谢!

【问题讨论】:

    标签: javascript object titanium argument-passing string-comparison


    【解决方案1】:

    要么编写比较函数,要么找到要比较的标量属性(数字或字符串)。

    【讨论】:

      【解决方案2】:

      所以在我看来,传递给处理程序的timestampID 是一个对象,但是从第二条语句(以及随附的 [INFO] 注释)来看,我完全不知道它有什么属性。让我们假设它有一个称为时间戳的属性。那么你的if 语句应该是

      if (myArray[i].timestampID === timestampID.timestamp) 
      

      但恐怕我只能从这段代码 sn-p 中收集到这些信息。

      更新:好的,我知道你是如何触发事件的。 Titanium API 在这一点上令人费解地迟钝(看起来help for fireEvent 是错误的:两个参数称为“名称”?)。没有我能看到的例子。但是,它确实说您作为数据传入的内容(必须?)序列化为 JSON。

      现在我知道了,查看第二条语句的 [INFO] 行更有意义。它是一个包含 JSON 数据的字符串。您的数据丢失了,因为它是一个字符串值。试试这个开火:

      Ti.App.fireEvent('confirmation', { timestampID: '1307740835264' } );
      

      以及事件处理程序中的 this:

      Ti.App.addEventListener('confirmation', function (data) {
        for (i=0;i<myArray.length;i++) {
          if (myArray[i].timestampID === data.timestampID) { 
              ...code...
          }
      }
      

      });

      【讨论】:

      • 什么是时间戳?你是说时间戳吗?
      • 我试图传递的只是时间戳作为参数(我只是选择将其称为时间戳ID)。除了字符串之外,我不需要发送任何其他属性。它适用于我接收 timestampID 并将其用作字符串的其他任何地方,但 if 比较严格将其识别为对象。
      • @Micah:那我怕我迷路了。您显示的代码太少,无法揭示问题。
      • @Micah:我想我现在明白了。查看我的更改。
      • 谢谢。您发现了参数本身必须是 JSON 的问题,但实际上我只是像您最初建议的那样传递一个对象。你可以看到用例here。虽然我认为我真正的问题应该是:如果我声明var myObject = {};,那么我如何通过调用myObject.?????? 来生成字符串“myObject”?
      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2011-12-27
      相关资源
      最近更新 更多