您的位置:首页 > 移动开发 > Objective-C

五、引用类型Ⅰ(Object、Array、Date三种类型)

2014-02-26 17:00 260 查看
Week NO.2

由于本章内容篇幅较长故拆分成引用类型Ⅰ 引用类型Ⅱ两部分。

引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,将数据和功能组织在一起。引用类型有时也称对象定义,因为它们描述的是一类对象所具有的属性和方法。

对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的,构造函数本身就是一个函数。

var person = new Object();
这行代码创建Object引用类型的一个新实例,然后把实例保存在person中。

5.1 object类型

     大多数引用类型都是object类型的实例,object类型也是使用最多的一个类型。

     创建object实例的方式有两种

     a. 使用new操作符后跟object构造函数

 

var person = new Object();
person.name = "meiyzeng";
person.age = 26


     b.  使用对象字面量表示法。 (代码量少 ,封装数据感觉 ,推荐首选)

     
var person = {
name : "meiyzeng",
age : 26  //数值属性会自动转化成字符串
}
   

    c.(不推荐)

  

var person = {}
person.name = "meiyzeng";
person.age = 26


一般来说 访问对象属性时使用都是点表示法,在js也可以使用方括号表示法来访问对象的属性。除非使用变量来访问属性,否则建议点表示法。
person.name      //点表示法
person["name"]   //方括号表示法


方括号表示法优点可通过变量访问属性

如:person["first name"] = "meiyzeng"

由于“first name”中包含一个空格,所以不能用点访问,而属性中是可以包含非字母非数字的。

5.2 Array类型

      js里数组可以保存任何类型的数据,也可动态调整大小。

      创建数组的两种基本方式

      a. 使用Array()构造函数 :var colors = new Array(3); //创建一个包含3项的数组

      在使用Array构造函数也可以省略new操作符

      b.使用数组字面量表示法 由一对包含数组项的方括号表示,数组项用逗号间隔 :var colors = ["red","blue"]

      在读取和设置数组时,使用方括号并提供相应值基于0的数字索引

var colors = ["a","b","c"];
colors[5] = "f";
alert(colors.length)  //6
console.log(colors)   //["a", "b", "c", undefined, undefined, "f"]
colors.length = 3;
alert(color[2]) // undefined


      5.2.1检测数组

      单一的全局执行环境中使用instanceof操作符检测:如下:
if (value instanceof Array){
//
}


     解决方法Array.isArray()   (存在低版本浏览器不兼容问题)

if(Array.isArray(value)){
//
}


      5.2.2 转换方法

var colors = ["a","b","c"];
alert(colors)  //由于alert()要接收字符串参数,所以会在后台调用toString()方法

     valueOf的优先级本来就比toString的高。

     在默认情况会以逗号分隔字符串返回数组项,使用join()方法可以使用不同的分隔符来构建

var colors = ["a","b","c"];
alert(color.join("||"))   // a || b || c
alert(color.join(""))    //a,b,c   (ie7及更早版本会使用undefined作为分隔符)


     5.2.3 栈方法

     栈(后进先出)是一种可以限制插入和删除项的数据结构。其插入移除只发生在栈的顶部

     push()和pop()是数组默认方法。

var colors = new Array();
var count = colors.push("red","green")
alert(count)  //2

count = colors.push("black");
alert(count)  //3

var item = colors.pop();  //取得最后一项
alert(item);  //black
alert(color.length)  //2


-------------------------------------------

     这里要注意一点比如push()方法返回的是一个长度值 如下:

var colors = new Array();
var count = colors.push("red","green")
console.log(colors)  //["red", "green"]
console.log(count)   //2
alert(count);
-------------------------------------------

      栈方法可以与其他数值方法连用。

     5.2.4 队列方法

     队列(先进先出)在列表末端添加项,从前端移除。push()是项末端添加,而shift()方法能够将第一项移除。  

     结合push()和shift()方法,可以像队列一样使用数值

var colors = new Array();
var count = colors.push("red","green")
alert(count)  //2

count = colors.push("black");
alert(count)  //3

var item = colors.shift();  //取得第一项
alert(item);  //"red"
alert(color.length)  //2


    unshift()方法则可以从前端添加任意个项并返回新数组长度(ie7中返回undefined而不是数组新长度)

     5.2.5 重排序方法

     数组中存在两个可以直接用来重排序的方法:reverse()和sort()

     reverse()方法会反序数组 如:

var values = [1,2,3,4,5]
values.reverse();
alert(values);   // 5,4,3,2,1


     sort()默认升序排列,会调用每个数组项的toSring()转型方法 如:

var values = [0,1,5,20,25,3]
values.sort();
alert(values); // 0,1,20,25,3,5


于是有了比较函数:(下面的是升序,降序同理可得)

   
function compare(varl,val2){
if(val1 < val2){
return -1;
}else if (val1 > val2){
return 1;
}else{
return 0;
}
}

var values = [0,1,5,20,25,3]
values.sort(compare);
alert(values); // 0,1,3,5,20,25


(对于数值类型或者valuesOf()方法返回数值类型的对象类型可以使用下面简单的方法比较)

  
function compare(val1,val2){
return val2 - val1;  //降序
}


如果想要升级排序 则return语句应该返回 val1-val2 (此处书本有误)

       5.2.6 操作方法


      concat()方法新构建一个数组

var c1 = ["1","2","3"]
var c2 = c1.concat("num","num1")
alert(c2) // 1,2,3,num,num1


     slice()方法(不会影响原始数组),可以接受一个或两个参数,即返回项的起始和结束位置。

    a. 一个参数情况下 返回该参数指定位置开始到数组末尾的所有项

    b. 两个参数情况下则返回起始结束位置之间的项(不包括结束位置的项

var c1 = ["1","2","3","4"]
var c2 = c1.slice(1); // 2,3,4
var c3 = c1.slice(1,3); // 2,3   不包括位置3的值4


*如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。

如在一个包含5项的数组slice(-3,-1)和slice(2,4)是等同的。如果结束位置小于起始位置,则返回空数组。

     splice()方法

     主要用途向数组中的中部插入项

     删除:(2个参数)可以删除任意数量的项,指定两个参数,要删除第一项的位置和要删除的项数

     如:splice(0,3)会删除数组中前三项

     插入:(3个参数)起始位置、0(要删除的项数)和要插入的项数       

     如:splice(3,0,"1","2") //位置3开始插入字符串"1","2"

     替换:(3个参数)起始位置,要删除的项数和要插入的项数            

     如:splice(3,1,"1","2") //删除当前数组2的项然后再插入

     5.2.7 位置方法

     两个方法:indexOf()和lastIndexOf(),两个方法都接受两个参数:要查找的项和(可选的)表示查找起点位置的索引。

     其中indexOf()从开头开始查找,而lastIndexOf()从数组末尾开始查找。返回位置,没找到则返回-1;查找过程使用全等操作符必须严格相等

      5.2.8 迭代方法

      5种迭代方法,每个接收两个参数:要子每一项上运行的函数和(可选的)运行改函数的作用域对象--影响this的值。

      every():      对数组中每项运行给定函数,如果该函数对每一项都返回true,则返回true。

      filter():        对数组中每项运行给定函数,返回函数会返回true的项组成的数组  //对于查询符合条件的所有数组非常有用

      forEach():  对数组中每项运行给定函数,该方法无返回值

      map():        对数组中每项运行给定函数,返回每次函数调用的结果组成的数组。

      some():      对数组中每项运行给定函数,任意一项返回true,则返回true;

     5.2.9 缩小方法

     reduce()和reduceRight()两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce()从头开始,reduceRight()则从末端开始。

     这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为缩小基础的初始值

     reduce()和reduceRight()的函数接收4个参数 (前一个值、当前值、项的索引和数组对象)如:

     使用reduce()方法可以执行求数组中所有值之和的操作

var val = [1,2,3,4,5]
var sum = val.reduce(function(prev,cur,index,array){
return prev + cur;
})
alert(sum); // 15

5.3 Date类型

      Date类型保存的日期能够精确到1970年1月1日之前或之后285616年

      创建日期对象:
var now = new Date();


       在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。为了简化这一计算过程,JavaScript提供了两个方法:Date.parse()和Date.UTC()。

  其中,Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。JavaScript没有定义Date.parse()应该支持哪种格式,因此这个方法的行为因实现而异,而且通常是因地区而异。将地区设置为美国的浏览器通常都接受下列日期格式:

        Date类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下:

  toDateString()——以特定于实现的格式显示星期几、月、日和年

  toTimeString()——以特定于实现的格式显示时、分、秒和时区

  toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年

  toLocaleTimeString()——以特定于实现的格式显示时、分、秒

  toUTCString()——以特定于实现的格式完整的UTC日期

      


     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息