JS中关于变量的使用一点问题

一些小小的BUG,总能导致各种各样诡异的问题!有的BUG也属于无心之作,也有莫名的问题出现,当然这中间不排除我们使用的各种工具所带来的!总之,BUG会随时出现的!而我们程序猿就是拿来要对应这些BUG的!
前几天写代码的时候,就遇到了一个非常之诡异的问题,在组织好数据的时候提交到后台后,诡异的问题出现了,我在左侧菜单上,选择其它功能的时候,IE,Chrome会打开新的窗口!FF不会,主页上是个frame,上左右结构,菜单栏左侧,上部是图片,右侧显示,操作数据!
Action的save方法从头到尾都没看出任何端倪!一开始就想到,frame的taget属性,一定是在什么地方修改了这个值,想到我这提交数据的方法于其它功能不一样(我是在JS里面组织好JSON格式的数据,再用JSON2.js里面的JSON.stringify()方法将组织成字符串传回后台,后台写了个小方法将Json字符串解析一下

/**
* 解析JSON数据
*
* @param s
* @param clazz
* @return
*/
public List jsonToBean(String s,Class clazz){
JSONArray jarr=JSONArray.fromObject(s);
return (List)jarr.toCollection(jarr,clazz);
}
/**
* 取得页面json数据
*
*/
public void getData () throws Exception {
List<ClassBean> list = jsonToBean(jsonStr,ClassBean.class);
...
}
)!看了后台代码都没有问题!于是乎到JS代码去看看:
代码如下:

// 提取指定行的数据,JSON格式
function GetRowData(row) {
var rowData = {};
for ( var j = 0; j < row.cells.length; j++) {
name = row.parentNode.rows[0].cells[j].getAttribute('Id');
if (name) {
var value = row.cells[j].getAttribute('Value');
if (!value) {
value = row.cells[j].innerHTML;
}
rowData[name] = value;
}
}
return rowData;
}

在IE,Chrome自带的调试工具下,发现,name值没有定义?那name的值现在到底是取的哪里的呢?看了看才知道,果不其然,name="mainFrame",原来,在这没有定义局部变量的name取到了主页上frame name的属性值,进而对其做了修改,导致菜单上打开其它功能出现异常!修改给name定义局部变量后,功能正常!
正常代码:

// 提取指定行的数据,JSON格式
function GetRowData(row) {
var rowData = {};
for ( var j = 0; j < row.cells.length; j++) {
var name = row.parentNode.rows[0].cells[j].getAttribute('Id');
if (name) {
var value = row.cells[j].getAttribute('Value');
if (!value) {
value = row.cells[j].innerHTML;
}
rowData[name] = value;
}
}
return rowData;
}

现在在此做个小小的总结,一开始定位到frame的taget属性是没有问题的!并且在一步步的深入后知道结果了,自己的经验又丰富了!后测试,将js的name变量不定义的时候也还是好用的,需要将name改个名,不要冲突就好,那样js也会将这个变量识别为局部的!这说明个问题!js是灵活的,但有时候太灵活了也不太容易把握了!所以这也是JS高手比较牛的地方吧!还有就是这个变量名命名也不太好,这种太简单的,不太好,还是要遵守命名规范的好!这样也体现了代码规范的问题!最后就是,我不知道我定义的var 变量为什么会没了,我记得非常清楚的是,我都是有对变量定义作用域的,至于这个 var 为什么见了,或许是工具的问题,抑或是谁谁谁不小心改错了,不小心按错之类的,这个现在深究也没有太多了的意义,只不过一个小小的问题,现在反应出这么问题!呵呵!抑或是我想太多了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值