JS基础--------数组

1.数组的概念

1、创建数组的方式

(1)数组直接量

  var empty=[ ];

  var undefs=[ , ,];

(2)调用构造函数

  var a=new Array();

  var a=new Array(5,4,3,2,1,"testing"} //js是一种非类型语言,数组中元素类型可以不一致

  var a=new Array(10);

 2、数组元素的读和写

  i=2;

  a[i]=3;

  a[i+1]="hello";

  a[a[i]]=a[0];

 数组元素下标大于等于0,小于2的32次方减1,若超出这个范围或是负数、浮点数等,js将其转为字符串作为对象属性名,而不是数组下标。

a[-1.23]=true;

3、添加数组元素

js不像java等一旦申明数组长度将保持不变,js中数组元素的个数是随时可以改变,且数组元素的下标不必在某个连续整数范围内,只有那些在数组中存在的元素才会被分配内存

a[0]=1;

a[999]=999;//只有下标是0或是999的元素才会被分配内存,之间的元素将不会被分配内存

4、删除数组

delete运算符只是将数组元素值赋予了undefined,数组元素还存在;真正删除数组元素用shift

5、数组的长度

和常规的对象属性不同,数组的长度是动态更新的

var a=new Array();//a.length==0

a=new Array(10);//a.length==10

a=new Array(1,2,3)//a.length==3;

a=[5,6];//a.length==2

a[49]=0;//a.length==50

由于数组中可能还有undefined元素,所以数组的长度是数组中元素的最大下标数加1

6、遍历数组元素

若数组元素下标是连续的可以用常规的for循环迭代元素,一般在迭代前我们要检验数组元素是否被定义

for(var i=0;i<a.length;i++)

if(a[i])alert(a[i]);

7、难点

    var lea = [];
    lea[0] = 'a';
    lea[1] = 'b';
    lea['name'] = 'abc';
    alert(lea['name']);
    alert(lea); 

执行结果;


当你把其中的    lea[0] = 'a';    lea[1] = 'b';注释掉后,执行结果是:



你得到是是啥?空,不是null是空!返回的不是Array的数据类型也不是数组的内容,是空……
    var m = {
            name:"keel",
            age:5
        }
        var a = [m,"sss",3];
        console.info(m["name"]);
        console.info(a[0]["name"]);
        console.info(a[0].name);
        console.info(a[0]);
        console.info(m.name);
        console.info(m["age"]);
        console.info(m[0]);

执行结果:



认真看下,发现如果以var lea = [];  lea['name'] = 'abc';这样的形式命名和 var m = { name:"keel", age:5 }这种方式命名的array数组,并不适合使用array[n]的形式去读取。因为js在处理的时候并没有把内容序列化。所以在最终结果当中,出现了得不到结果。
也就是说,在JS中,使用arrar[n]="xx";赋值得到的内容与array["name"]="xx";赋值得到的内容并没有放到一个序列当中,是分成两块内存进行的存储,两个互不干扰,相当于两个数组变量~
但是在直接输出array数组的时候,没有使用a[]这样命名的数组里面有内容,但是却不会被当做string进行处理, 所以,内容是得不到的~
但是在使用
var m = {
    name:"keel",
    age:5
    }
这样的命名方式的时候,内容会被当做是Object得到。所以也不会取值~这样结果就比较正常。为什么是OBJECT呢?因为这个时候,m就是一个枚举型。所以被稻作了一个Object对待。所以,在数据命名当中尽量少使用a["name"]="xx";这样的形式。这种命名方式会被大量的忽略掉。 为什么呢?主要原因就是因为这种方式是属于方法中的属性读取。也就是说,你这样读取的内容,是读取了a的一个特别属性,和使用a.name读取到得内容是一样的。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值