第三讲:引用类型

3.0、学习目标

  –掌握数组的概念、特性、常用方法

  –掌握Object,学会使用对象

  –了解其他引用类型对象

3.1、本讲包括的内容如下:

  -数组

  -Object

  -其他引用类型

3.2、数组

  •在ECMAScript中数组是非常常用的引用类型了。ECMAScript所定义的数组和其他语言中的数组有着很大的区别。那么首先要说的就是数组也是一种对象。

  •特点:

    –“数组”即一组数据的集合。

    –js数组更加类似java的容器。长度可变,元素类型也可以不同!

    –数组长度随时可变!随时可以修改!(length属性)

  •常用方法:

    –push、pop

    –shift、unshift

    –splice、slice

    –concat、join、sort、reverse等

  •对于ECMAscript5这个版本的Array新特性补充:

    –位置方法:indexOf      lastIndexOf

    –迭代方法:every  filter   forEach   some    map

    –缩小方法:reduce    reduceRight

示例代码1:

  1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2 <html>
  3     <head>
  4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5         <title>Untitled Document</title>
  6         <script type=text/javascript charset=utf-8>
  7
  8                 /**
  9                  *      数组本身也是对象
 10                  *      js中数组类似于java里的map容器 长度可随意改变 ,元素类型任意
 11                  *
 12                  */
 13                 //  var arr = new Array();
 14                 //     var arr = [1,2,3,4,true ,‘abc‘ , new Date()] ;
 15                 //  alert(arr.length);
 16                 //  arr.length = 5 ;
 17                 //  alert(arr.toString()); // [object object]
 18
 19
 20                 /**
 21                  *  push 和 pop 方法
 22                  */
 23                 //var arr = [new Date(),false] ;
 24                 //var result = arr.push(1,2,true);    //push方法向数组中追加元素(返回值为新数组的长度)
 25                 //alert(arr);
 26                 //alert(result);
 27                 //var obj = arr.pop();        //从数组的尾部移除一个元素(返回值为移除的元素)
 28                 //alert(arr);
 29                 //alert(obj);
 30
 31                 /**
 32                  * shift 和 unshift 方法
 33                  */
 34                 //var  arr = [1,2,3, true , new Date()];
 35                 //var r1 = arr.shift();            //从头部移除一个元素(返回移除的元素)
 36                 //alert(arr);
 37                 //alert(r1);
 38                 //var r2 = arr.unshift(10,false);    //从头部插入多个元素(返回新数组的长度)
 39                 //alert(arr);
 40                 //alert(r2);
 41
 42                 /**
 43                  * splice、slice 方法 (截取的方法)
 44                  * splice方法操作数组本身
 45                  * slice方法不操作数组本身
 46                  *
 47                  */
 48
 49                 // splice: 第一个参数 :起始位置
 50                 //             第二个参数 :表示截取的个数
 51                 //             第三个参数以后:表示追加的新元素个数
 52
 53                 //var arr = [1,2,3,4,5];
 54                 //arr.splice(1,2,3,4,5);    // 134545
 55                 //alert(arr);
 56
 57                 // slice://返回截取的内容 //截取范围 (左闭右开区间)
 58                 //var arr = [1,2,3,4,5];
 59                 //var reuslt = arr.slice(2,4);
 60                 //alert(reuslt);        //3,4
 61
 62                 //操作数组的方法: concat join
 63
 64                 //var arr1 = [1,2,3];
 65                 //var arr2 = [true , 4 , 5];
 66
 67                 //var reuslt = arr1.concat(arr2);        //合并粘连的操作(不操作数组本身)
 68                 //alert(reuslt);
 69
 70                 //var result = arr1.join(‘-‘);        //在每个元素之间加入内容(不操作数组本身)
 71                 //alert(arr1);
 72                 //alert(result);
 73
 74                 /**
 75                  * sort排序
 76                  * reverse倒叙
 77                  */
 78                 var arr1 = [5,2,1,4,3];
 79                 var arr2 = [10,2,4,1,7];
 80
 81                 //arr1.sort();
 82                 //arr1.reverse();        //倒叙排序 是按照集合的位置进行倒叙的
 83                 //alert(arr1);
 84                 //arr2.sort();
 85                 //alert(arr2);        // 1 10 2 4 7
 86
 87                 function compare(value1 , value2){
 88                     if(value1 < value2){
 89                         return -1 ;
 90                     } else if(value1 > value2){
 91                         return 1 ;
 92                     } else {
 93                         return 0 ;
 94                     }
 95                 }
 96                 arr2.sort(compare);
 97                 alert(arr2);
 98
 99
100
101         </script>
102     </head>
103     <body>
104     </body>
105 </html>

示例代码2:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>Untitled Document</title>
 6
 7         <script type=text/javascript charset=utf-8>
 8
 9                         var arr = [1,2,3,4,5,4,3,2,1];
10
11                         /*
12                         //新加位置的方法: indexOf lastIndexOf
13                         // 1个参数的时候表示传值 返回索引位置(index从0开始)
14                         //var index = arr.indexOf(4);
15                         // 2个参数的时候 第一个参数表示起始位置 第二个参数还是值
16                         //var index = arr.indexOf(4,4);
17                         //alert(index);
18                         //他们查找数组比较的时候 ‘===‘
19                         // lastIndexOf
20                         //var index = arr.lastIndexOf(2);
21                         //alert(index);
22                         */
23
24                         //5个新加迭代的方法
25                         //every :对于数组每一个元素进行一个函数的运行 如果都返回true 最后则返回true 如果有一个返回false最后结果则返回false
26                         /*
27                         var result = arr.every(function(item , index , array){
28                             return item > 2 ;
29                         });
30                         alert(result);
31                         */
32                         //filter :对于数组的每一个元素进行一个函数的运行 给定的函数去执行 把过滤后的结果返回
33                         /*
34                         var result = arr.filter(function(item , index , array){
35                             return item > 2 ;
36                         });
37                         alert(result);
38                         */
39                         //forEach :循环数组每一项的值 并执行一个方法
40                         /*
41                         arr.forEach(function(item, index, array){
42                                 alert(item);
43                         });
44                         */
45                         //map 对于数组的每一个元素进行一个函数的运行 可以经过函数执行完毕后 把新的结果返回
46                         /*
47                         var result = arr.map(function(item, index, array){
48                             return item*2;
49                         });
50                         alert(result);
51                          */
52                         //some :对于数组每一个元素进行一个函数的运行 如果有一项返回true 最后则返回true 如果每一项都返回false最后结果则返回false
53                         /*
54                         var result = arr.some(function(item, index, array){
55                             return item >=5 ;
56                         });
57                         alert(result);
58                         */
59
60                         //reduce    reduceRight
61                         //变量的起始位置不同
62                         //前一个值 , 当前值 , 索引位置 , array
63                         /*
64                         var result = arr.reduce(function(prev , cur , index , array){
65                                     return prev + cur ;
66                         });
67                         alert(result);
68                         */
69                         /*
70                         var result = arr.reduceRight(function(prev , cur , index , array){
71                                     return prev + cur ;
72                         });
73                         alert(result);
74                         */
75         </script>
76     </head>
77     <body>
78     </body>
79 </html>

3.3、Object

  •我们目前为止大多数引用类型都是Object类型的实例,Object也是ECMAScript中使用最多的一种类型(就像java.lang.Object一样,Object类型是所有它的实例的基础)。

    –Object类型的创建方式、使用

    –对于Object类型应用for in 枚举循环

  •Object每个实例都会具有下列属性和方法:

    –Constructor: 保存着用于创建当前对象的函数。(构造函数)

    –hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中(而不是原型中)是否存在。

    –isPrototypeOf(Object): 用于检查传入的对象是否是另外一个对象的原型。

    –propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。

    –toLocaleString():返回对象的字符串表示。该字符串与执行环境的地区对应.

    –toString():返回对象的字符串表示。

    –valueOf():返回对象的字符串、数值或布尔表示。

示例代码1:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>Untitled Document</title>
 6         <script type=text/javascript charset=utf-8>
 7
 8                 //Object 所有类的基础类
 9
10                 //var obj = new Object();
11                 var obj = {} ;        // 实例化对象
12                 // 给对象设置属性
13                 obj.name = ‘张3‘;
14                 obj.age  = 20 ;
15                 //obj.sex  = ‘男‘;
16                 obj["birthday"] = ‘1980-08-07‘;
17                 obj.say = function(){
18                     alert(‘hello world!‘);
19                 }
20
21                 // 访问对象的属性或方法
22                 //alert(obj.name);
23                 //alert(obj.age);
24                 //obj.say();
25
26                 // delete 操作符 删除对象的属性或方法的
27                 /*
28                 delete obj.age ;
29                 delete obj.say ;
30
31                 alert(obj.name);
32                 alert(obj.age);
33                 alert(obj.sex);
34                 obj.say();
35                 */
36
37                 // 如何去变量一个js对象  for in 语句式
38                 /*
39                 for(var attribute in obj) {
40                     alert(attribute +" : "+ obj[attribute]);
41                 }
42                 */
43                 //Constructor保存对象的创建函数
44                 //alert(obj.constructor);
45                 //var arr = [] ;
46                 //alert(arr.constructor);
47
48                 //hasOwnProperty(propertyName) 用于检测给定属性在对象中是否存在
49                 //alert(obj.hasOwnProperty(‘sex‘));
50
51                 //isPrototypeOf(Object) 检测原型
52
53                 //检测给定的属性是否能被for in 所枚举出来
54                 //alert(obj.propertyIsEnumerable(‘say‘));
55
56
57
58         </script>
59     </head>
60     <body>
61     </body>
62 </html>

示例代码2:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>Untitled Document</title>
 6         <script type=text/javascript charset=utf-8>
 7
 8
 9                 function Map(){
10
11                     // private
12                     var obj = {} ;// 空的对象容器,承装键值对
13
14                     // put 方法
15                     this.put = function(key , value){
16                             obj[key] = value ;        // 把键值对绑定到obj对象上
17                     }
18
19                     // size 方法 获得map容器的个数
20                     this.size = function(){
21                             var count = 0 ;
22                             for(var attr in obj){
23                                 count++;
24                             }
25                             return count ;
26                     }
27
28                     // get 方法 根据key 取得value
29                     this.get = function(key){
30                         if(obj[key] || obj[key] === 0 || obj[key] === false){
31                             return obj[key];
32                         } else {
33                             return null;
34                         }
35                     }
36
37                     //remove 删除方法
38                     this.remove = function(key){
39                         if(obj[key] || obj[key] === 0 || obj[key] === false){
40                             delete obj[key];
41                         }
42                     }
43
44                     // eachMap 变量map容器的方法
45                     this.eachMap = function(fn){
46                             for(var attr in obj){
47                                 fn(attr, obj[attr]);
48                             }
49                     }
50
51
52                 }
53
54                 //模拟java里的Map
55                 var m = new  Map();
56                 m.put(‘01‘ , ‘abc‘);
57                 m.put(‘02‘ , false) ;
58                 m.put(‘03‘ , true);
59                 m.put(‘04‘ , new Date());
60
61                 //alert(m.size());
62
63                 //alert(m.get(‘02‘));
64                 //m.remove(‘03‘);
65                 //alert(m.get(‘03‘));
66
67                 m.eachMap(function(key , value){
68                      alert(key +" :"+ value);
69                 });
70
71         </script>
72     </head>
73     <body>
74     </body>
75 </html>

示例代码3:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>Untitled Document</title>
 6
 7         <script type=text/javascript charset=utf-8>
 8
 9
10             var arr = [2,1,2,10,2,3,5,5,1,10,13];    //object
11
12
13             // js对象的特性 : 在js对象中 key 是永远不会重复的
14             /*
15             var obj = new Object();
16             obj.name = ‘z3‘;
17             obj.age = 20 ;
18             //alert(obj.name);
19             obj.name = ‘w5‘;
20             alert(obj.name);
21             */
22
23             // 1 把数组转成一个js的对象
24             // 2 把数组中的值,变成js对象当中的key
25             // 3 把这个对象 再还原成数组
26
27             // 把数组转成对象
28             function toObject(arr){
29                 var obj = {} ; // 私有的对象
30                 var j ;
31                 for(var i=0 , j= arr.length ; i<j; i++){
32                         obj[arr[i]] = true ;
33                 }
34                 return obj ;
35             }
36
37             // 把这个对象转成数组
38             function keys(obj){
39                 var arr = [] ; // 私有对象
40                 for(var attr in obj){
41                     if(obj.hasOwnProperty(attr)){        //YUI底层代码
42                         arr.push(attr);
43                     }
44                 }
45                 return arr ;
46             }
47
48             //综合的方法 去掉数组中的重复项
49             function uniq(newarr){
50                 return keys(toObject(newarr));
51             }
52
53             alert(uniq(arr));
54
55
56
57
58
59
60
61
62
63
64
65         </script>
66     </head>
67     <body>
68     </body>
69 </html>

3.4、其他引用类型

  •单体对象:

    –Global对象(全局)这个对象不存在,无形的对象

    •其内部定义了一些方法和属性:encodeURI 、encodeURIComponent、decodeURI、decodeURIComponent、eval、parseInt、parseFloat、isNaN、Escape、 unescape

    –Math对象

    •内置的Math对象可以用来处理各种数学运算

    •可以直接调用的方法:Math.数学函数(参数)

    •求随机数方法:Math.random(),产生   [0,1)  范围一个任意数

  •Date对象

    –获取当前时间的一系列详细方法

  •基本包装类型:Boolean、String、Number和java的用法类似

  •Function类型、RegExp类型(以后学习)

示例代码:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>Untitled Document</title>
 6         <script type=text/javascript charset=utf-8>
 7
 8             /*
 9             //Global 全局的 终极的 兜底的对象  (不存在的)
10
11             var uri = ‘http://www.bjsxt.com cn‘;
12             //encodeURI 、encodeURIComponent
13             var str1 =     encodeURI(uri); // %20            // (url : // 不会进行编码)
14             var str2 =     encodeURIComponent(uri);        //常用的方法 (任何不标准的文字都会进行编码)
15
16             //alert(str1);
17             //alert(str2);
18             //decodeURI、decodeURIComponent
19             //alert(decodeURI(str1));
20             //alert(decodeURIComponent(str2));
21             */
22
23             /*
24             //eval(string) 方法 无形的javascript解析器
25
26             //var str1 = "var a = 10 ; var b = 20;";
27             //eval(str1);
28             //alert(a+b);
29             // 数组字符串 直接使用: eval(stringarr);
30             // {name:z3 , age:20}
31             var strobj = "{name:‘z3‘ , age:20}";
32             var obj = eval(‘(‘+strobj+‘)‘);
33             alert(obj.name);
34             */
35
36
37             //parseInt parseFloat
38             /*
39             var num1 = parseInt(‘20‘);
40             var num2 = parseFloat(‘20.5‘);
41             alert(num1 + ‘   ‘ + num2);
42             alert(typeof num1);
43             alert(typeof num2);
44             */
45
46             //escape unescape   URI
47
48             /*
49             var str1 = ‘尚学堂‘;
50             var str2 = escape(str1);
51             alert(str2);
52             var str3 = unescape(str2);
53             alert(str3);
54             */
55             /*
56             //isNaN // 如果不是number类型 true  是number类型 false
57
58             var num1 = ‘10‘;
59             var num2 = ‘abcd10e‘;
60             alert(isNaN(num2));
61
62             //在js里面 只有NaN 自己不等于自己本身的
63
64             if(NaN == NaN){
65                 alert(‘相等‘);
66             } else {
67                 alert(‘不等‘)
68             }
69             */
70
71             /*
72             //Date 日期类型
73
74             var date = new Date();
75             //alert(date);
76
77             var year = date.getFullYear();
78             var month = date.getMonth() + 1 ;
79             var da   = date.getDate();
80             var day  = date.getDay();
81             var hours = date.getHours();
82             var min   = date.getMinutes();
83             var sc    = date.getSeconds();
84             document.write(‘今天是‘ + year + ‘年‘ + month + ‘月 ‘ + da+ ‘日‘ + hours +‘:‘ + min +‘:‘ +sc+ ‘星期‘ +day );
85             document.write(‘\n‘ + date.getTime());
86             */
87
88
89
90         </script>
91     </head>
92     <body>
93     </body>
94 </html>

时间: 2024-10-12 00:10:04

第三讲:引用类型的相关文章

跟我学《JavaScript高程3》第三讲,课程笔记

跟我学<JavaScript高程3> 第三讲:第4章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作    课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 课程回顾 1.数据类型:5种基本类型,1中复杂类型. 2.操作符:需要注意运算优先级,算关逻条赋逗. 3.语句:if-else.for.for-in.while 4.函数:函数定义,目前的两种方法 补充:变量在

C# 引用类型之特例string

在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应该使用  new 对象方法一个实例,但是微软为了方便大家,可以直接定义字符串变量 并且赋值操作,例如: string a = "我的中国心"; ,这样只是简化我们的操作: 2)一个字符串赋值给另一个字符串变量:正常的引用类型会将两个引用变量指向同一个地址,但是一个字符串变量赋值给另一个字符

JavaScript的进阶之路(三)引用类型之Object类型和Array类型

引用类型 Object类型 function a(num){ if(num>3){ a(--num); } console.log(num); } a(5); //如何创建对象的实例 var obj1= new Object(); console.log(obj1); obj1.name="吴琼"; obj1.age=28; console.log(obj1.name+" "+obj1.age); //对象字面量语法 ,有点封装的感觉 var obj2 = {

值类型与引用类型的区别

值类型 基本类型  4类8种 整型  byte   字节型   1长度   0~255 short  短整型   2长度 int      整型      4长度 long   长整型   8长度 浮点型  float     单精度浮点型 double 双精度浮点型 字符型  char  单字符型  数据必须包裹在单引号之间 波尔型  bool  逻辑型  true 真.对 /  false  假.错 枚举类型 结构体 引用类型               字符串   string  多个字符

java中四种引用类型(对象的强、软、弱和虚引用)

对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出O

javascript中用来定义引用类型的一种&quot;默认&quot;模式

// 终极版:组合使用构造函数模式和原型模式:***************************** // 评价:集构造函数模式和原型模式之大成: 用来定义引用类型的一种默认模式 function Person(name, age, job){ //构造函数用来定义实例属性 this.name = name; this.age = age; this.job = job; this.friends = ["Shelby","Court"]; } Person.p

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

C# 引用类型和值类型

1.引用类型 FCL(Framework)中的大多数类型都是引用类型,引用类型总是在托管堆中分配的,C#的new操作符会返回对象的内存地址,也就是指对象数据的内存地址.在使用引用类型时,存在以下性能问题,这是我们在开发中必须要注意的: a.内存必须从托管堆上分配(也就是说每new一个对象,会占用内存,对象过多就会导致内存占用) b. 堆上分配的每个对象都有一些额外的成员,这些成员必须初始化 c.对象中的其他字节(为字段而设),总是设为0 d.从托管堆中每分配一个对象,可能强制执行一次垃圾回收操作

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员