- 浏览: 704920 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
联合数组以及Prototype的风险
联合数组以及Prototype的风险
Associative Arrays and the Risks of Prototype
JavaScript的对象都可以作为联合数组(associative arrays,也称为哈希、哈希结构或者哈希表)。这就意味着你可以使用点符号来访问一个对象属性:
someObject.objProperty
你还可以使用数组符号访问一个属性,给出属性名称作为索引:
someObject["objProperty"]
在键值对之间进行映射是联合数组固有的特征。由于JavaScript对象可以作为联合数组,所以你也可以使用JavaScript的for...in语句来迭代对象的属性:
for (props in obj) {...}
你还可以利用任何JavaScript对象,来建立一个新的联合数组,包括Array、RegExp、Object、String等。如下代码就使用了Array对象,这也是非常恰当的用法:
var newArray = new Array();
newArray['1'] = 'one';
newArray['3'] = 'three';
它看上去非常简单,但是,这在那些使用JavaScript的人,尤其是使用Prototype的人之间会引发一些非常激烈的争论。
有些人会说,在JavaScript中没有联合数组,这种功能只不过是添加运行期属性的一种方式罢了。但是,暂且不说语义如何,这种功能和联合数组是相匹配的(数组元素是由键或者名称,而不是由数字来指定的),因此,从各个方面来说,它都是联合数组。
还有些人说,在JavaScript中使用联合数组是错误的,或者是有害的。他们解释说:使用Array对象建立一个联合数组,违反了自然规律——通常给你提供有关数组信息的方法就不再工作了,例如:长度,并且我们应该仅仅将Array对象,用于传统的数字数组来支持可预料的行为。
对于Prototype来说,这是一个相当尖锐的问题,因为它通过prototype属性扩展了基本的Array对象。如果你从Array对象建立一个联合数组,而Prototype这样的库会扩展联合数组本身,那么当你使用for...in来查询它时,你可能会得到不可预料的结果,而且很有可能会导致应用程序中断。
为了取代使用Array作为联合数组这种方式,一些Ajax专家建议使用Object。在Prototype 1.4版本中也使用了prototype属性,扩展了JavaScript中基本的Object,但Stephenson又把它从1.5版本中剔除了。因此它仍旧扩展了String、Array以及其他对象,如果使用联合数组功能来访问应用程序中的对象属性,你就应该清楚这些内容。
警告:你也需要非常清楚prototype的扩展能力,如果你正在使用多个库,它们各自都有可能在原始的JavaScript对象上建立自己的扩展。这些库之间的冲突可能会导致一些很难调试而且又不可思议的问题。
评论
到底应该如何解决呢?不知道博主有没有好方法?
发表评论
-
JavaScript 代码压缩工具
2011-02-16 15:15 931见附件,免费工具。 -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2009-11-26 13:38 10703在服务器端判断request来自Ajax请求(异步)还是传 ... -
转:用Javascript来关闭IE浏览器和FireFox浏览器
2009-06-03 11:08 2173原文地址:http://hi.baidu.com/suen ... -
JavaScript 解析 JSON
2009-02-25 20:36 0JSON (JavaScript Object Not ... -
JavaScript的四舍五入运算
2009-02-02 13:49 1769function ForDight(Dight,How) { ... -
JavaScript 使用面向对象的技术创建高级 Web 应用程序
2009-01-19 21:44 1510转载: JavaScript 使用面 ... -
在JavaScript中使用面向对象
2009-01-18 17:05 1121原文地址:http://www.cnblo ... -
应当这样编写 JavaScript 代码吗?
2009-01-17 23:09 1119应当这样编写 JavaScript 代码吗? 您已经看到Ja ... -
JavaScript模拟命名空间
2009-01-17 17:35 1326JavaScript模拟命名空间 在C++和C#中,命名 ... -
JavaScript 从类继承
2009-01-17 17:32 1272从类继承 到这里,我们已经了解了构造函数和原型对象如何使您在 ... -
模拟私有属性
2009-01-07 15:46 1127模拟私有属性 现在介绍闭包如何帮助模拟私有成员。正常情况 ... -
闭 包
2009-01-07 15:10 1237闭包 我没有自觉地学习过JavaScript。我必须快点了解 ... -
静态属性和方法
2009-01-05 18:15 1309静态属性和方法 有时,您需要绑定到类而不是实例的属性或方法, ... -
原 型
2009-01-05 17:58 1057原型 在使用JavaScript的面向对象编程中,原型对象 ... -
构造函数而不是类
2009-01-04 23:15 1390构造函数而不是类 前面提到过,有关JavaScript ... -
JavaScript 函数是最棒的
2009-01-04 19:25 1468JavaScript 函数是最棒的 在很多编程语言中,函数和 ... -
insertAdjacentElement方法
2008-12-29 18:08 2468语法: oElement = object . inse ... -
javascript 中定义private 方法
2008-12-26 12:40 2295出处:http://aoqi1883.blog.163.co ... -
event.returnValue和return false的区别
2008-12-25 19:52 26602<!DOCTYPE html PUBLIC " ... -
按“回车”键提交表单
2008-12-25 19:17 2555<!DOCTYPE html PUBLIC " ...
相关推荐
本文将深入探讨如何有效地复制数组以及如何从数组中抽取特定元素来组成新的数组,这将帮助我们更好地理解和掌握JavaScript中的数组操作技巧。 ### 复制数组 复制数组通常指的是创建一个与原数组具有相同元素的新...
在JavaScript编程中,...综上,本示例展示了JavaScript处理JSON数组的分组合并操作,涉及到的基本概念包括数组遍历、对象属性访问、哈希映射以及数组操作。了解这些知识点有助于提升在实际项目中处理JSON数据的能力。
所有数组的方法都定义在Array.prototype上,而Array.prototype本身也是一个数组。 array.concat() 浅复制一份当前数组,并把接收到的参数附加到新数组的末尾。原数组不改变。 语法 array.concat(value1, value2, …,...
11. Array.prototype.includes(): 判断数组中是否存在指定元素,存在则返回true,不存在则返回false。 以上是JavaScript数组操作的基础知识,熟练掌握这些操作,能有效提升你在处理数组时的效率和代码质量。在...
本文将重点讲解如何实现数组扁平化以及`push()`和`concat()`方法的区别。 首先,让我们看看如何通过递归方法实现数组扁平化。这种方法分为两种,一种是基础的递归,另一种是更推荐的递归方式。 **递归一**: ```...
如果你不想改变原数组的引用,可以使用`Array.prototype.splice()`方法: ```javascript aa.splice(0, aa.length); ``` 这个方法会删除从索引0开始到当前数组长度的所有元素,达到清空数组的效果,同时不会改变原...
JavaScript的`Array.prototype.concat()`方法只能合并两个数组,而ArrayUtil的`concatAll`可以接受任意数量的数组作为参数,一次性将它们连接起来。 2. **数组去重** (`unique`) JavaScript的数组没有内置的去重...
例如,Prototype提供了如`$`, `$$`, `$A`, `$F`, `$H`, `$R`, `$w`, `Try.these`等实用函数,以及`document.getElementsByClassName`等扩展方法,极大地提高了JavaScript的可读性和效率。 #### 三、Prototype的API...
总之,当使用Vue处理数组和对象时,需要注意直接操作数组长度、索引赋值以及对象属性的直接修改可能不会触发视图更新。应尽量避免这些操作,转而使用Vue提供的方法或JavaScript的替代方案来确保数据变化能正确反映到...
JS数组降维–Array.prototype.concat.apply二维数组降为一维数组循环降维concat降维apply和concat降维Vue2.6.11版本源码降维多维数组降为一维数组递归降维 把多维数组(尤其是二维数组)转化为一维数组是业务开发中...
这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先,让我们详细了解Prototype.js。Prototype是Adam Slovik和Sam Stephenson在2005年开发的,它的目标是通过提供类、对象继承...
本文主要探讨了如何利用数组的特性,特别是`push`、`shift`方法实现队列的先进先出(FIFO)原则,以及`forEach`方法在数组操作中的应用和注意事项。 ### 数组与队列 在JavaScript中,数组天生支持队列的操作。`...
首先,我们需要了解如何通过`Array.prototype.indexOf`方法来查找数组中元素的索引位置。这个方法接受一个参数,遍历数组寻找第一个与该参数相等的元素。如果找到了,就会返回这个元素的索引;如果没有找到,就会...
### JavaScript 数组增加和删除方法详解 在JavaScript中,数组是一种非常重要的数据结构,用于存储一系列按顺序排列的值。本文将详细介绍如何通过自定义方法实现数组元素的插入与删除功能。 #### 插入方法 `insert...
1. **Prototype库基础**:Prototype库提供了一系列的JavaScript扩展,包括类、对象、数组、字符串和函数的增强,以及DOM操作、事件处理、Ajax请求等工具。 2. **类与对象**:Prototype通过模拟面向对象编程的概念,...
Prototype 为Array和Hash对象添加了许多实用的方法,如`Array.each()`遍历数组,`Array.include()`将元素添加到数组,`Hash.keys()`获取哈希的所有键,以及`Hash.values()`获取所有值。这些方法极大地提高了处理数组...
Prototype库的核心理念是通过扩展JavaScript的内置对象,如Array、String、Function等,以及提供便捷的DOM操作方法,简化前端开发工作。1.5.1版本是Prototype的一个稳定版本,包含了众多实用的功能和修复了一些已知...
在工具性方面,Prototype提供了数组、字符串、日期等基本类型的操作方法,如`Array.prototype.each`用于遍历数组,`String.prototype.include`用于检查字符串是否包含特定子串。这些扩展极大地丰富了JavaScript的...
在提供的代码中,`Array.prototype.distinct` 函数被定义为一个扩展数组原型的方法。这个函数通过排序数组并比较相邻元素来实现去重。它特别处理了两种特殊类型的数据:对象和数组。如果相邻的两个元素都是对象,...
在JavaScript的世界里,jQuery是一个广泛使用的库,它极大地简化了DOM操作、事件处理以及Ajax交互。在jQuery中,经常会遇到需要处理类似数组的对象,比如`jQuery对象`就是一个典型的类数组对象。本文将深入探讨...