JavaScript核心语法学习部分(五)

程序=数据+算法;

前面学的if/if-else/switch/循环解决的都是流程问题,即是算法问题。

所谓的数据结构,就是把数据与数据间的关系按照特定的结构来保存。设计合理的数据结构是解决问题的前提。

数组:

①存储:连续存储多个数据的存储空间。

②使用:相当于多个变量的集合。

为什么使用数组?现实中数据都是批量分类 管理的。

何时使用:只要批量管理多个数据,就要用数组保存。

如何使用:数据都是用[]创建出来的。

var arr=[];  创建了一个数组对象,数组中包含了0个元素。

var arr=[95,61,95];创建了一个数组对象,数组中联系存储了3个元素,分别是95,61,95。

2个不限制:①不限制元素个数!②不限制元素数据类型!

数组是引用类型的对象。

原始类型:数据保存在变量本地

引用类型:数据不保存在变量本地,保存在“堆”中;由地址指向实际数据。

引用类型特点:可以保存多个数据,而且数据个数随时可变。

为什么要用引用类型?

原始类型中只能保存1个值,1个值无法精确描述一个东西,现实中,都是用多个属性共同描述一样东西。

 

对象:凡是存储在堆中,都是对象!

使用引用类型的对象:使用变量,等效于使用对象的地址。使用对象地址,等效于使用对象本身。

数组对象支持直接输出数组内容。

其他数组创建语法:var arr=new Array(num);

new:要在堆中开辟空间!

Array:ECMAScript标准中的内置类型。new Array:在堆中创建一个数组 类型的存储区域。(num)代表初始创建num个元素。

null:一个变量没有指向任何对象

何时使用null:主动释放对象!

垃圾回收:js引擎自动销毁不再被引用的对象!垃圾回收程序:随js程序运行而后台同时运行。

只要对象还有变量引用,就不回收。

访问数组:数组一组变量的集合。

如何获得其中一个变量/数据:下标,数组中唯一标识一个元素的序号。从0开始,最后一个元素的下标是“元素个数-1”;

js内置对象不但封装存储,而且封装常用API

API:已经实现的方法,可以直接调用。

Array  API:

①arr.length属性:数组中元素的个数。

访问任意数组的最后一个元素 :var last=arr[arr.length-1]

length属性值,随数组长度变化而自动变化!

js中数组可以根据程序的需要,自动扩容,保证程序的正常执行。

数组扩容和缩容:都是length属性的值。如果length属性>旧值,会扩容;如果length<旧值,会缩容,(截断)

被截断的元素,不能被找到,不会被回收,只能随数组 对象一起回收。

固定用法:在任意数组结尾追加一个新元素:

arr.[arr.length]=新值

案例1:输入姓名追加到数组,exit退出01

 1     var    emps=[];
 2     var input;
 3     while(true){
 4             input=prompt("请输入员工姓名:")
 5             if(input!=="exit"){
 6                 emps[emps.length]=input;
 7             }else{
 8                 break;
 9             }
10             };
11             document.write(emps);

案例2:输入姓名追加到数组,exit退出02

1     var    emps=[];
2     var input;
3     while((input=prompt("请输入员工姓名:"))!=="exit"){
4                 emps[emps.length]=input;
5             };
6             document.write(emps);

栈中的变量,声明周期:和堆完全不同!

var a=5;//全局变量随网页生命周期;

结论:局部变量的生命周期和所在方法的作用域环境栈有关。

作用域创建,局部变量一同创建

作用域结束,局部变量一同消失

什么是数组遍历:对数组中每个元素执行相同的操作

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

arr[i];//当前元素

}

关联数组:数组下标可以自定义名称!

何时使用关联数组:数组元素的内容无法描述自己的意义时,使用关联数组为每个元素 起名。

关联数字组的.length属性作废了。

for in:专门遍历关联数组使用!

for(var key in arr){

    //从第一个元素开始,将元素的key赋值给临时变量key

}

案例:范冰冰成绩单

1     var fbb=[];
2     fbb["姓名"]="范冰冰"
3     fbb["数学"]="90";
4     fbb["语文"]="61";
5     fbb["英语"]="95";
6     for(var key in fbb){
7         document.write(key+":"+fbb[key]+"<br>");
8     }

 关联数组直接量定义方式:强调:大括号

{“key1”:"value1","key2":"value2",...}

案例:冒泡排序法(数组的遍历)

 1     var arr=[5,3,2,6,4,9,8,7];
 2     for(var n=1;n<=arr.length;n++){
 3     for(var i=0;i<arr.length-1;i++){
 4         var curr=arr[i];
 5         var next=arr[i+1];
 6         if(curr>next){
 7             var box=arr[i];
 8             arr[i]=arr[i+1];
 9             arr[i+1]=box;
10         }
11     }    
12     };

数组的常用方法:

x.toString()方法:任何对象都有toString()方法。将任何对象转为字符串,一般不主动调用,js在 需要时自动调用;默认用逗号作为分隔符。

x.valueOf()方法:同toString()

arr.join("分隔符"):将数组 转为字符串。可定义分隔符!

用法:将字符拼接为单词或句子

案例:拼接字符串

1     var chars=['H','E','L','L','O'];
2     var str=chars.join("");
3     document.write(str);

arr.concat(元素值,[数组],...):  将参数拆散成单个元素,追加到数组中。

不会修改原数组,只能返回新数组对象!

案例:arr.concat拼接案例

1     var arr1=[1,2,3];
2     var arr2=[12,23,123];
3     var newArr=arr1.concat(arr2);
4     console.log(newArr);

var subArr=arr.slice(start,end+1):

截取下标从start开始,到end位置的元素生成子数组对象。**含头不含尾**

截取倒数第2个,到倒数第四个:arr.silce(newArr.length-4,newArr,length-2+1);

arr.splice:删除!插入!替换!

删除元素: arr.splice(strat,count);

替换元素: arr.splice(strat,count,值1,值2,值3,....);

插入元素:arr.splice(strat,0,值1,值2,值3,....);

 splice方法有返回值,返回的是删除的元素组成的新数组。

arr.reverse():颠倒所有数组元素

arr.sort():默认升序排列,默认都转为字符串排列。

posted @ 2017-09-04 14:24  Angche  阅读(205)  评论(0编辑  收藏  举报