日期:2014-05-16  浏览次数:20339 次

关于js数组!简单问题
var jsmenu = new Array();
jsmenu['active'] = new Array();
jsmenu['active'][ctrlid] =
谁帮我解释一下下面两句的意思.第一句我知道是定义个数组但.jsmenu['active'] = new Array();是什么意思呢?
jsmenu['active'][ctrlid] 右表示什么呢?


------解决方案--------------------
仅作参考!
JScript code

// 定义数组!
var jsmenu = new Array(); 
// 为 jsmenu 增加动态属性active,active也是一个数组!
jsmenu['active'] = new Array();
// 通过变量 ctrlid 为 jsmenu 动态属性active(数组)的相应索引处赋值!
jsmenu['active'][ctrlid] =

------解决方案--------------------
HTML code
var jsmenu = new Array();//jsmenu等于新数组对象 
jsmenu['active'] = new Array();//等效于jsmenu.active = new Array(); jsmenu的active属性等于新数组
jsmenu['active'][ctrlid]  = "";//同理 jsmenu.['active'][ctrlid] = ...;ctrlid必须是一个字符串的变量名

js中Object对象的 xxx["yy"] 这种写法表示xxx的一个名为"yy"的属性
new Array()
new String()
new Function()
new Number()
new Date()
....
都是以object为基类的对象 所以都可以这么写


var aa = "";
var bb = 0;
var cc = false;
这些值类型对象比较特殊 没有办法扩展属性

------解决方案--------------------

JScript 中的数组是稀疏的。也就是说,如果一个数组具有三个元素,编号分别为 0、1 和 2,您就可以创建元素 50,而不必担心从 3 到 49 的参数。如果该数组有一个自动的 length 变量,(请参阅内部对象了解有关数组长度的自动监控的说明),该 length 变量被设为 51,而不是 4。当然您可以创建各元素的编号之间没有间隙的数组,不过没有必要这样做。

在 JScript 中,对象和数组几乎相同。两个主要差别是对象没有自动长度属性,而数组没有对象的属性和方法。

数组寻址
使用方括号“[]”来寻址数组。方括号中是一个数值或一个值为整数的表达式。下面的示例假定在脚本的其他地方已定义了entryNum 变量,且已赋值。 

theListing = addressBook[entryNum];
theFirstLine = theListing[1];
将对象作为关联数组
通常,使用点运算符“.”访问对象的属性。例如,

myObject.aProperty
在这里,属性名称是一个标识符。也可以用索引运算符“[]”访问对象的属性。在这里,是把对象看作一个关联数组。关联数组是一种数据结构,它可以动态地将任意的数据的值与任意的字符串相关联。例如,

myObject["aProperty"] // 与上面相同。
尽管索引运算符更多地用于访问数组元素,当用于对象时,索引总是以字符串文字表示的属性名称。

注意访问对象属性的两种方法的重要差异。

运算符 属性名称作为 对属性名称的处理 
点“.” 标识符 不能作为数据处理 
索引“[]” 字符串文字 能被作为数据处理 


在运行之前并不知道属性名称时,这个差异会有用(比如基于用户输入构造对象时)。要想从一个关联数组提取所有的属性,必须用 for … in 循环。

另外楼上对字符串对象的讲解有一点点小的问题

String 对象可用字符串文字显式创建。用这种方法创建的 String 对象(指以标准字符串形式)与用 new 运算符创建的 String 对象处理上不同。所有字符串文字共享公用的全局字符串对象。如果为字符串文字添加属性,则它对所有标准字符串对象都是可用的: 

var alpha, beta;
alpha = "这是一个字符串";
beta = "这也是一个字符串";

alpha.test = 10;
在前一示例中,这时为 beta 和所有将来的字符串定义 test。然而,在下面的例子中,被添加属性的处理略有不同: 

var gamma, delta;
gamma = new String("这是一个字符串");
delta = new String("这是也一个字符串");

gamma.test = 10;
在这种情况下,不为 delta 定义 test。每个用 new String 声明的 String 对象有其自己的一组成员。这是对 String 对象和字符串文字的处理不同的唯一情况。 

以上资料来源:JScript 语言参考
----------------------------
不过对于string这里仍旧有一点小问题,后一种情况似乎没有问题,但前面的string在ie测试时test都为undefined.


------解决方案--------------------
就是数组的成员也是数组~~
JScript code
var arr=[1,"123",[5,6,7],{a:123,b:456}];
//arr[0]是1
//arr[1]是"123"
//arr[2]是数组
//所以arr[2][0]是5,arr[2][1]是6
//arr[3]是个对象,arr[3].a是123,arr[3].b是456