检查对象是否具有属性时出现Javascript错误

检查对象是否具有属性时出现Javascript错误,javascript,jquery,object,properties,comparison,Javascript,Jquery,Object,Properties,Comparison,我有一个对象,我把它存储在一个cookie中,然后得到这个对象并用它进行一些检查,这很好,但我的问题是线路 if(!arr.hasOwnProperty($(this).val())){ 在 $(“.not”)。单击(函数(){ //警报($(this.val()+JSON.stringify(arr)); 如果(!arr.hasOwnProperty($(this.val())){ $.getJSON(“json/startup/not”,{id:$(this).val()},函数(json

我有一个对象,我把它存储在一个cookie中,然后得到这个对象并用它进行一些检查,这很好,但我的问题是线路

if(!arr.hasOwnProperty($(this).val())){

$(“.not”)。单击(函数(){
//警报($(this.val()+JSON.stringify(arr));
如果(!arr.hasOwnProperty($(this.val())){
$.getJSON(“json/startup/not”,{id:$(this).val()},函数(json){
如果(json.status==“确定”){
arr[json.data.id]=json.data.id;
arr=JSON.stringify(arr);
$.cookie('votedId',arr);
$('#percent'+json.data.id).html(json.data.percent);
$('#vows'+json.data.id).html(json.data.vows);
}
});
}否则{
警报(“已对此启动进行投票!”);
}
//警报($(this.val());
});
发生的是,我第一次这样做,它意识到,通过传入的值,它没有任何属性,并让投票发生。然后它不让它投票,因为它应该投票

然而,问题在于页面上的其他元素,他们可以投票,然后在投票第一个元素后,说传入的id有一个属性,即使它不在那里。如果我刷新页面,它会让我投票

正因为我觉得上面的解释有点难以理解,让我举个例子

我有很多关于投票热门与否的事情。第一个的id为1,第二个的id为2,依此类推。我认为1是热的,所以cookie和arr数组被更新为具有属性1,所以不能再次对其进行投票。然而,在那之后,所有其他事情都说他们也被投票了,尽管他们还没有被投票。所以现在我不能对2投赞成票。但是如果我刷新页面就可以了。但是如果我想对元素3投票,我必须刷新页面


有什么想法吗?

在您的代码中,您有:

...
arr[json.data.id] = json.data.id;
arr = JSON.stringify(arr); // <-- this is likely the reason for the error
...

因此,我应该创建第二个变量,以便将其作为字符串发送到cookie,并让arr保持良好的状态?是的,应该这样做。由于您希望
arr
保留一个数组/对象,以便下次使用。由于您使用的不是字符串化版本的
arr
,而是用于设置cookie,因此不需要为其设置另一个变量。看我的更新。是的,好的,看起来很棒!谢谢你的建议!我仍然习惯于非类型敏感的语言。它是一个JSON对象,只跟踪投票对象的id。
...
arr[json.data.id] = json.data.id;
arr = JSON.stringify(arr); // <-- this is likely the reason for the error
...
...
arr[json.data.id] = json.data.id;
// arr = JSON.stringify(arr); // drop this line
$.cookie('votedId', JSON.stringify(arr)); // assign directly without overwriting arr
...