JavaScript之引用类型

本秂侑毒 提交于 2020-01-17 00:58:56

    引用类型的对象是引用类型的一个实例。
    引用类型有时也被称为对象定义
    新对象是使用new操作符后跟一个构造函数来创建的。

Object类型

    Object是ECMAScript中使用最多的一个类型。对于在应用程序中存储和传输数据而言,它们是非常理想的选择。
    创建Object实例的方式有两种:
        第一种是使用new操作符后跟Object构造函数。
        另一种是使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象过程

var person = {
	name : "Sunshine",
	age:22
};

在这个例子中,左边的花括号表示对象字面量的开始,因为它出现在了表达式上下文中。ECMAScript中的表达式上下文指的是能够返回一个值(表达式)。赋值操作符表示后面是一个值,所以左花括号在这里表示一个表达式的开始。
    在使用对象字面量语法时,属性名也可以使用字符串。数值属性名会自动转换为字符串。
    使用对象字面量语法时,如果刘空其花括号,则可以定义只包含默认属性和方法的对象。
    开发人员更青睐对象字面量语法,因为这种语法的代码量少,而且能够给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式。
    一般来说,访问对象属性时使用的都是点表示法。在JavaScript也可以使用方括号表示法来访问对象的属性。
    在使用方括号语法时,应该将要访问的属性以字符串的形式放在方括号中。优点:可以通过变量访问属性。如果属性名中包含会导致语法错误的字符或者属性名使用的是关键字或保留字,也可以使用方括号表示法。

person["first name"] = "Sunshine";

由于"first name"中包含一个空格,所以不能使用点表示法来访问它。
    通常,除非必须使用变量来访问属性,否则建议使用点表示法

Array类型(这个内容超级多啊!)

    ECMAScript中的数组与其他多数语言中的数组有着相当大的区别。ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
    创建数组的基本方式有两种:
        第一种是使用Array构造函数。如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,而该数量会自动变成length属性的值。也可以向Array构造函数传递数组中应该包含的项。使用Array构造函数时也可以省略new操作符。
    给构造函数传递一个职业可以创建数组。但这时候问题有点复杂,因为如果传递的是数值,则会按照该数值创建包含给定项数的数组;而如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。
        第二种是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。
    在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引。如果设置某个值的索引超过了数组现有项数,数组就会自动增加到该索引值加一的长度。
    数组的length属性有很多特点,它不是只读的。通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。如果将length属性设置为大于数组项数的值,则新增的每一项都会取得undefined值。
    由于数组最后一项的索引始终是length-1,因此下一个新项的位置就是length。每当在数组末尾添加一项后,其length属性都会自动更新以反映这一变化。当把一个值放在超出当前数组大小的位置上时,数组就会重新计算其长度值,即长度值等于最后一项的索引加1.
    数组最多可以包含4 294 967 295个项。
1.检测数组
Array.isArray()方法的目的:
    是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。
2. 转换方法
    所有对象都有toLocaleString()、toString()和valueOf()方法。调用数组的toString()和valueOf()方法会返回相同的值,即由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。

var colors = ["red","blue","green"];		//创建一个包含3个字符串的数组
alert(colors.toString());		//red,blue,green
alert(colors.valueOf());		//red,blue,green
alert(colors);		//red,blue,green

由于alert()要接收字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。
    如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。join()方法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。如果不给join()方法传入任何值,或者给它传入undefined,则使用逗号作为分隔符。
    如果数组中的某一项的值是null或者undefined,那么该值在join()、toLocaleString()、toString()和valueOf()方法返回的结果中以空字符串表示。
3. 栈方法
    栈是一种LIFO(后进先出)的数据结构,也就是最新添加的项最早被移除。栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。ECMAScript为数组专门提供了push()和pop()方法,以便实现类似栈的行为。
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。而pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
4.队列方法
    队列数据结构的访问规则是FIFO(先进先出)。对列在列表的末端添加项,从列表的前端移除项。由于push()是向数组末端添加项的方法,因此要模拟队列只需一个从数组前段取得项的方法。实现这一操作的数组方法就是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1.结合使用shift()和push()方法,可以像使用队列一样使用数组。
    unshift()与shift()用途相反:它能在数组前端添加任意个项并返回新数组的长度。因此,同时使用unshift()和pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项。
5.重排列方法
    数组中已经存在两个可以直接用来重排序的方法:reserve()和sort()。
    reserve()方法会反转数组项的顺序。
    sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。
6.操作方法
    concat()方法可以基于当前数组中所有想创建一个新数组。这个方法会先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。
    在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果不是数组,这些纸就会被简单地添加到结果数组的末尾。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!