登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

前几天讨论了ActionScript中的动态添加属性的问题,今天看看JavaScript的  

2006-01-29 19:42:05|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
<script>
try
{
 var key;
 var new_Number123;
 alert("new_Number123 = new Number(123)\n" + (new_Number123 = new Number(123)));
 alert("new_Number123.p=888\n" + (new_Number123.p = 888));
 alert("new_Number123.p\n" + new_Number123.p);
 alert("new_Number123.constructor == Number\n" + (new_Number123.constructor == Number));
 alert("for(key in new_Number123) alert(key);");
 for(key in new_Number123) alert(key);
 var _123;
 alert("_123 = 123\n" + (_123 = 123));
 alert("_123.p=888\n" + (_123.p = 888));
 alert("_123.p\n" + _123.p);
 alert("_123.constructor == Number\n" + (_123.constructor == Number));
 alert("for(key in _123) alert(key);");
 for(key in _123) alert(key);
 var regexp;
 alert("regexp = /regexp/\n" + (regexp = /regexp/));
 alert("regexp.p=888\n" + (regexp.p = 888));
 alert("regexp.p\n" + regexp.p);
 alert("regexp.constructor == RegExp\n" + (regexp.constructor == RegExp));
 alert("for(key in regexp) alert(key);");
 for(key in regexp) alert(key);
 var string;
 alert("string = \"string\"\n" + (string = "string"));
 alert("string.p=888\n" + (string.p = 888));
 alert("string.p\n" + string.p);
 alert("string.constructor == String\n" + (string.constructor == String));
 alert("for(key in string) alert(key);");
 for(key in string) alert(key);
 var array;
 alert("array = [123, 456, 789]\n" + (array = [123, 456, 789]));
 alert("array.p=888\n" + (array.p = 888));
 alert("array.p\n" + array.p);
 alert("array.constructor == Array\n" + (array.constructor == Array));
 alert("for(key in array) alert(key);");
 for(key in array) alert(key);
}
catch(e)
{
 alert("e.description: " + e.description);
}
</script>
 
 
 
把以上文字保存为.htm的文件,用FireFox和IE执行结果都一样。
值得注意的是(_123.p = 888)返回的值是888,虽然不引发异常(for...in也不引发异常),但是实际上却没有效果,在下一条代码测试_123.p仍然是undefined,而所有用new做出来的对象,比如new Number(123)、new String("123")和new出来的自定义对象,都可以动态添加属性。
用JavaScript内置语法生成的变量,也并非都不可以动态添加属性,而只有数字和字符串不行。其他的,用/regexp/生成的正则表达式,用[123,456,789]生成的数组,以及{a:123,b:456}这样做出来的Object都可以动态添加属性。
 
顺便说一下,Array和Object都一样用hash表来保存,只是Array要计算length 属性
  评论这张
 
阅读(401)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018