ie9 ff11, javascript 数组处理的一个bug
来源:互联网 发布:淘宝好的童装店铺 编辑:程序博客网 时间:2024/06/03 18:57
我也知道是bug,还是本来就是这样的
看js代码:
var ep={ title:"默认相册", desc:"快来上传照片吧", img:"http://pic.**m...403d0c295512c740_mb.jpg", link:"u1191122496/photo/show/82354307",title:"默认相册"}var list_photo=[]list_photo.push(ep)list_photo.push(ep)list_photo.push(ep)list_photo.push(ep)list_photo[1].img=url+'?'+idalert(list_photo[2].img)alert(list_photo[1].img)
结果弹出的两个值是一样的,其实所有的值都被修改了
我找到了答案,在一个很古老的chm(script56.chm)文档中:
在 JScript 中,对数据的处理取决于该数据的类型。
按值和按引用的比较
Numbers 和 Boolean 类型的值 (true 和 false) 是按值来复制、传递和比较的。当按值复制或传递时,将在计算机内存中分配一块空间并将原值复制到其中。然后,即使更改原来的值,也不会影响所复制的值(反过来也一样),因为这两个值是独立的实体。
对象、数组以及函数是按引用来复制、传递和比较的。当按地址复制或传递时,实际是创建一个指向原始项的指针,然后就像拷贝一样来使用该指针。如果随后更改原始项,则将同时更改原始项和复制项(反过来也一样)。实际上只有一个实体;“复本”并不是一个真正的复本,而只是该数据的又一个引用。
当按引用比较时,要想比较成功,两个变量必须参照完全相同的实体。例如,两个不同的 Array 对象即使包含相同的元素也将比较为不相等。要想比较成功,其中一个变量必须为另一个的参考。要想检查两个数组是否包含了相同的元素,比较toString() 方法的结果。
最后,字符串是按引用复制和传递的,但是是按值来比较的。请注意,假如有两个 String 对象(用 new String("something") 创建的),按引用比较它们,但是,如果其中一个或者两者都是字符串值的话,按值比较它们。
(测试发现,字符串不是按引用复制复制和传递的)
注意 鉴于 ASCII 和 ANSI 字符集的构造方法,按序列顺序大写字母位于小写字母的前面。例如 "Zoo" 小于 "aardvark"。如果想执行不区分大小写的匹配,可以对两个字符串调用toUpperCase() 或toLowerCase()。
传递参数给函数
按值传递一个参数给函数就是制作该参数的一个独立复本,即一个只存在于该函数内的复本。即使按引用传递对象和数组时,如果直接在函数中用新值覆盖原先的值,在函数外并不反映新值。只有在对象的属性或者数组的元素改变时,在函数外才可以看出。
例如(使用 IE 对象模式):
// 本代码段破坏(覆盖)其参数,所以// 调用代码中反映不出变化。function Clobber(param) { // 破坏参数;在调用代码中 // 看不到。 param = new Object(); param.message = "This will not work";}// 本段代码改变参数的属性,// 在调用代码中可看到属性改变。function Update(param){ // 改变对象的属性; // 可从调用代码中看到改变。 param.message = "I was changed";}// 创建一个对象,并赋给一个属性。var obj = new Object();obj.message = "This is the original";// 调用 Clobber,并输出 obj.message。注意,它没有发生变化。Clobber(obj);window.alert(obj.message); // 仍然显示 "This is the original"。// 调用 Update,并输出 obj.message。注意,它已经被改变了。Update(obj);window.alert(obj.message); // 显示 "I was changed"。
检验数据
当按值进行检验时,是比较两个截然不同的项以查看它们是否相等。通常,该比较是逐字节进行的。当按引用进行检验时,是看这两项是否是指向同一个原始项的指针。如果是,则比较结果是相等;如果不是,即使它们每个字节都包含完全一样的值,比较结果也为不相等。
按引用复制和传递字符串能节约内存;但是由于在字符串被创建后不能进行更改,因此可以按值进行比较。这样可以检查两个字符串是否包含相同的内容,即使它们是完全独立产生的。
- ie9 ff11, javascript 数组处理的一个bug
- IE9无法调试Javascript的一个解决方法
- ie9渲染的bug
- IE9 RC版关于overflow的一个bug
- 这难道是Javascript的一个BUG(日期处理)
- IE9,IE10 JavaScript 枚举属性的一个问题
- IE9的一个BUG:propertychange和input事件在拖拽 / 剪切 / 删除时无法触发
- 解决weebox的一个Bug(IE9下exception : SCRIPT5022: DOM Exception: INVALID_CHARACTER_ERR (5))
- ie9下面的console的bug
- JavaScript数组排序bug
- JavaScript字符串操作的一个BUG
- 关于 javascript event flow 的一个bug
- IE8及以下JavaScript的一个bug
- htmlparser 处理标签的一个bug
- struts2关于checkbox处理的一个bug
- JavaScript对象数组的处理
- javascript 数组的一些处理处理方法
- 对一个数组的处理。
- 编译ARM版本GDB调试CORE文件
- 艰难的跨越 融合处理器GPU单元现状分析
- 大数模版
- 面向对象设计原则概述
- struts知识
- ie9 ff11, javascript 数组处理的一个bug
- iPhone开发之深入浅出 --- ARC
- Tomcat无法正常关闭
- 12 Effective Ways To Improve Your Programming
- AMD统一渲染GPU架构 历程回顾与评测
- 面试题里的数学证明题
- sql datatime格式转换
- 【会打败你的一些坏习惯】
- 从Folding@home项目看GPU通用计算发展