2017-06-16 65 views
1

好所以我有一个变量​​这是一个JavaScript对象,其中包含对象本身。无法从onclick获取javascript对象的值(返回undefined)

我有一个onclick功能,如下所示:

 if (localStorage.cal) { 
      var dat = JSON.parse(localStorage.cal); 
      console.log(dat); 
      eventMap = dat.map; 
      eventList = dat.list; 
     } 
     $(delAppearance).on('click', function(){ 
      if (lastKey && eventMap[lastKey]) { 
       var e = eventMap[lastKey]; 
       eventList[lastKey] = undefined; 
       delete eventList[lastKey]; 
       calObj.removeEvents(function(event){ 
       return new Date(event.date).toUTCString() == moment(lastKey)._d.toUTCString(); 

       }); 
       localStorage.cal = JSON.stringify({list:eventList, map:eventMap}); 
       lastKey = null; 
       $(delAppearance).hide(); 
      } 
     }); 

所以最后一个键当前设置为06/20/2017。​​内有06/20/2017的记录(请看下图);出于某种原因,当我尝试访问eventMap[lastKey]我得到undefined,我不能在if(lastKey && eventMap[lastKey])进入功能(看看。

任何帮助,将不胜感激。

enter image description here

UPDATE

所以它看起来像它来自这个:

var calClick = function(target){ 
     clearState(); 
     var d = new Date(target.date._d); 
     var prettyDate = ((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear()); 
     var hr = new Date().getHours(); 
     var min = new Date().getMinutes(); 
     $(aDate).val(prettyDate); 
     var s; 
     console.log(target); 
     if (s = eventMap[prettyDate]) { 
      lastKey = prettyDate; 
      $(delAppearance).show(); 
      setCurrentState(s); 
     } 

    } 

它在这里永远不会到达lastKey。这似乎是同样的问题,但。我必须以错误的方式访问eventMap。

+0

你在哪里分配eventMap到地图对象? – mjw

+0

@mjw固定问题 – jkushner

+0

是最后一个定义的关键吗? – MBurnham

回答

0

JavaScript中的哈希码与Java或C#不相似。每个对象都有自己的散列键,并且与相等性没有一致性。

当你将JSON解析成eventMap时,你正在创建一个对象“06/20/2017”的实例(不知道你的代码中的类型是什么,可能是日期?)。

当您试图访问EVENTLIST [中的lastKey]你正在使用的对象,也像“二○一七年六月二十〇日”的另一实例。如果你想使用另一个实例来访问地图,你需要实现一个标识映射,以确保您始终返回相同的

let d1 = new Date(2017, 5, 20); 
let d2 = new Date(2017, 5, 20); 
// d1 and d2 are different instances. even though they look the same. 

let mapObject = {}; 
mapObject[d1] = "some value"; 
console.debug(mapObject[d1]); // Will print 'some value' 
console.debug(mapObject[d2]); // Will print null 

d2 = d1; // Now let's make d2 the same instance as d1 
console.debug(mapObject[d2]); // Will now print the *expected* 'some value' 

代码的价值超过一万字实例当对象根据您的定义“相等”或“相等”时。

或者,您可以确保将原始对象分配给lastKey而不是分配新实例。

我推荐后者。

+0

但是,当我做console.log(eventMap)它显示对象 – jkushner