`
originwxit
  • 浏览: 53644 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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 为什么见了,或许是工具的问题,抑或是谁谁谁不小心改错了,不小心按错之类的,这个现在深究也没有太多了的意义,只不过一个小小的问题,现在反应出这么问题!呵呵!抑或是我想太多了!
1
0
分享到:
评论

相关推荐

    关于小程序wxml引用js中变量的疑问

    我是个入门小程序的新手,最近遇到了一点疑惑,请各路大神解答一下,十分感谢。 xxx.wxml 垃圾桶实时剩余容量 {{list.recy_left}} 可回收垃圾 有害垃圾 干垃圾 湿垃圾 在这个代码中,第三行可以取出来值,但是...

    通过yaml为json中的某个变量赋值

    在IT行业中,数据序列化和反序列化是常见的任务,其中JSON(JavaScript Object Notation)和YAML(YAML Ain't Markup Language)是两种广泛使用的格式。本篇将深入探讨如何利用YAML作为中介,来修改JSON文件中的特定...

    第4章 JS基础-变量类型和计算【不会变量,别说你会JS】.rar

    在JavaScript(JS)编程语言中,变量类型和计算是学习任何编程语言的基础,尤其是在前端开发领域,JS扮演着至关重要的角色。本章将深入探讨JS中的变量、数据类型以及基本计算操作,帮助开发者掌握JS的核心概念。 ...

    JavaScript私有变量实例详解

    本文实例讲述了JavaScript私有变量。分享给大家供大家参考,具体如下: 任何在函数中定义的变量,就是私有变量,因为这些变量在函数外部是无法访问到的。总的来说,私有变量包括函数的参数、局部变量和在函数内部...

    JavaScript中变量的相互引用

    在JavaScript中,变量的相互引用主要涉及到值的存储方式以及数据类型的特点。JavaScript有两大类基本数据类型(原始类型):原始值(如字符串、数字、布尔值等)和引用值(如对象、数组、函数)。原始类型是按值存储...

    ReactNative中组件变量方法的导入导出共1页.pd

    为了做到这一点,我们需要使用`import`语句。例如,假设你有一个名为`MyComponent.js`的文件,里面定义了一个`MyComponent`组件,你可以像这样导入它: ```javascript // 导入组件 import { MyComponent } from './...

    java变量和javascript变量之间的传递示例

    最近在用jsp做一个网站,其间涉及到java变量和javascript变量之间的互换,虽然网上资料众多,但是众说纷纭,并且很多都是带有误导性,做了许多尝试,终于比较清楚的搞懂了这个问题。通俗一点来讲,就是说java代码是...

    js正则表达式使用

    1,正则表达式,可以说是任何一种编程语言都提供的机制,它主要是提供了对字符串的处理...简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value;

    Javascript var变量删除原理及实现

    JavaScript中的变量删除是一个相对复杂的话题,因为它涉及到变量的作用域、内存管理以及JavaScript引擎的内部机制。在JavaScript中,`var`关键字用于声明变量,而这些变量的可删除性取决于它们的声明方式和作用域。 ...

    javascript 变量作用域 代码分析

    总之,JavaScript中的变量作用域是通过函数来划分的,全局变量实质上是window对象的属性,而未使用`var`等关键字声明的变量会成为全局变量。理解这些概念有助于编写更安全、更易于维护的JavaScript代码。正确管理...

    cross-env-设置环境变量跨平台

    在你的项目中使用`cross-env`,首先需要安装它。如果你使用npm(Node Package Manager),可以在终端中运行以下命令: ```bash npm install --save-dev cross-env ``` 这将在你的项目中安装`cross-env`作为开发...

    如何在VB.NET Web浏览器中获取会话变量及其值

    本篇文章将深入探讨如何在VB.NET中添加、获取会话变量,并在JavaScript中使用这些变量。 首先,让我们了解如何在VB.NET中设置和获取会话变量。在服务器端,你可以使用`Session`对象来操作这些变量。以下是一些示例...

    js工具类 使用说明方法介绍同步博客

    在本篇中,我们将深入探讨“js工具类”的使用方法,并结合“bee.js”与“bee.min.js”这两个文件进行说明。 首先,“bee.js”和“bee.min.js”都是JavaScript工具类库的实现。其中,“bee.min.js”是经过压缩和优化...

    Vue中用props给data赋初始值遇到的问题解决

    在Vue.js框架中,我们经常需要通过props从父组件向子组件传递数据。然而,当这些数据被用来初始化子组件的data时,可能会遇到一些问题。这个问题在给定的示例中表现得非常明显。让我们深入探讨这个问题以及如何解决...

    Lambda表达式里面修改外部变量问题

    先看下Lambda表达式里面修改外部变量问题 因为平台用的是JDK8,而且发现自己对那些新特性好像一点都不了解,就例如Lambda表达式,所以就开始对自己的代码进行改进了。。。  例如遍历Map,像我们正常遍历肯定是下面...

    js.zip_javascript

    JavaScript的作用域决定了变量的可见性,理解这一点对于避免变量污染和内存泄漏至关重要。闭包是一种特性,它可以访问并操作外部作用域的变量,常用于实现私有变量和记忆化等高级功能。正确理解和运用闭包,能避免...

    javascript 得到变量类型的函数

    这个功能需要写一点代码来实现。下面的函数可以得到一个变量的类型,调用时传递一个变量进去,会返回用字符串形式描述的变量类型。 代码如下: //得到x的类型,返回类型名称 function getType(x) { //如果x为null,则...

    ESC(js压缩软件)

    为了保证压缩后的代码仍然可维护,开发者通常会在生产环境使用压缩版JS,而在开发和测试环境中使用未压缩的源码。这可以通过配置不同的构建设置或利用像source maps这样的技术来实现。Source maps允许开发者在浏览器...

    Javascript同时声明一连串(多个)变量的方法

    js同时声明多个变量我们相信很多的朋都会反复的使用var来定义了,那么如果要更科学一点的方法要如何实现呢,下面我们一起来看一篇关于js声明变量的方法,具体细节如下所示。 JS声明变量的办法我就不说了,如果需要...

    浅谈Javascript变量作用域问题

    主要简单介绍了个人对于Javascript变量作用域问题的一点理解,分享给大家,有需要的小伙伴参考下

Global site tag (gtag.js) - Google Analytics