Javascript dispatchMessage和关联数组

Javascript dispatchMessage和关联数组,javascript,safari,safari-extension,Javascript,Safari,Safari Extension,我在将辅助数组传递到注入脚本时遇到问题 Global.html var settings = new Array(); settings["accountID"] = safari.extension.settings.getItem("accountID"); settings["accountName"] = safari.extension.settings.getItem("accountName"); settings["accountEmail"] = safari

我在将辅助数组传递到注入脚本时遇到问题

Global.html

  var settings = new Array();

  settings["accountID"] = safari.extension.settings.getItem("accountID");
  settings["accountName"] = safari.extension.settings.getItem("accountName");
  settings["accountEmail"] = safari.extension.settings.getItem("accountEmail");

            safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("settingsArray", settings);
script.js

 switch (msgEvent.name) {
      case "settingsArray":
           var settings = new Array();
           settings = msgEvent.message;
           console.log("accountID: " + settings["accountID"]);

           break;
使用“普通”数组时,效果很好

但是在传递关联数组时,我在调用例如设置[“accountID”]时总是会得到“未定义的

有人知道怎么了吗


  • 当您应该使用对象时,您正在使用数组

    var settings=new Array();//错
    变量设置={};//右(比“new Object()”更好)
    
  • 您不必要地使用了属性访问的字符串形式

    设置[“accountID”]=…;//可以,但是打字太多了
    settings.accountID=…;//完全相同的功能
    
    如果属性名称不是有效的JavaScript标识符(例如
    foo[“holy!*#$!it works”]=true
    ),或者需要从变量构造属性名称(例如
    foo[“account”+n]=“active”
    ),则仅在获取/设置属性值时需要使用括号表示法

  • 您正在创建新对象,然后将其丢弃

    var settings=new Array();//创建一个被变量引用的新数组
    设置=msgEvent.message;//丢弃数组并更改变量
    //引用新对象的步骤
    

  • 当您应该使用对象时,您正在使用数组。您不必要地使用了属性访问的字符串形式(可以是
    settings.accountID=…
    )。您正在创建新对象,然后将其丢弃。Phrogz,您能为这个问题添加一个答案吗,这样我就可以将其标记为已完成?