JavaScript 对象和数组

JavaScript 对象和数组

  什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。在ECMAScript 中引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称做为类,但 ECMAScript 中却没有这种东西。虽然 ECMAScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构。

Object类型

  到目前为止,我们使用的引用类型最多的可能就是 Object 类型了。虽然 Object 的实例不具备多少功能,但对于在应用程序中的存储和传输数据而言,它确实是非常理想的选择。创建 Object 类型有两种,一种是使用 new 运算符,一种是字面量表示法。

1.使用new运算符创建Object

var obj = new Object(); //new方式
obj.name = 'strive_or_die'; //创建属性字段
obj.age = 23; //创建属性字段

2.new 关键字可以省略(不推荐)

var obj = Object(); // 省略了new关键字

3.使用字面量方式创 Object

var obj = { //字面量方式
    name:'strive_or_die , // 创建属性字段
    age:23
};

4.使用字面量及传统复制方式

var obj= {}; // 字面量方式声明 的 象
obj.name = ' strive_or_die '; // 点符号给属性复制
obj.age = 23;

5.两种属性输出方式

alert(obj.age); // 点表示法输出
alert(obj['age']); //中括号表示法输出,注意引号

注意:在使用字面量声明 Object 对象时,不会调用 Object()构造函数(Firefox 除外)。

6.给对象创建方法

var obj= {
    run : function () { //对象中的方法 
             return 'Hello World!';
          }
}
alert(obj.run()); // 调用对象中的方法

7.使用 delete 删除对象属性

delete object.name; //删除属性

  在实际开发过程中,一般我们更加喜欢字面量的声明方式。因为它清晰,语法代码少,而且还给人一种封装的感觉。字面量也是向函数传递大量可选参数的首选方式。

function test(obj) { // 参数是一个对象 
   if (obj.name != undefined) 
      alert(obj.name); // 判断属性是否存在 
   if (obj.age != undefined) 
      alert(obj.age);
}

test({ //调用函数传递一个对象
    name:'strive_or_die',
    age:28
});
Array 类型

  除了 Object 类型之外,Array 类型是 ECMAScript 最常用的类型。而且 ECMAScript 中的 Array 类型和其他语言中的数组有着很大的区别。虽然数组都是有序排列,但 ECMAScript中的数组每个元素可以保存任何类型。ECMAScript 中数组的大小也是可以调整的。创建 Array 类型有两种方式:第一种是 new 运算符第二种是字面量

1.使用 new 关键字创建数组

var arr = new Array(); // 创建了一个数组
var arr = new Array(10); // 创建一个包含10个元素的数组
var arr = new Array('strive_or_die',23,'前端工程师','广州'); //创建一个数组并分配好了元素

2.以上三种方法,可以省略 new 关键字。

var arr = Array(); // 省略了new关键字

3 使用字面量方式创建数组

var arr = []; // 创建一个空的数组
var arr = ['strive_or_die',23,'前端工程师','广州']; //创建包含元素的数组
var arr = [1,2,]; // 不推荐这么做,IE会识别3个元素
var arr = [,,,,,]; // 同样,IE的会有识别问题,不推荐

特别注意:Array和 Object 一样,字面量的写法不会调用 Array()构造函数。(Firefox 除外)。

4.使用索引下标来读取数组的值

alert(arr[2]); // 获取第三个元素
arr[2] = '前端工程师'; //修改第三个元素
arr[4] = '计算机'; // 增加第五个元素

5.使用 length 属性获取数组元素量

alert(arr.length) // 获取元素个数
arr.length = 10; // 强制元个数
arr[arr.length] = 'JavaScript '; // 通过length给数组增加一个元素

6.创建一个稍微复杂一点的数组

var arr = [{ // 第一个元素是一个对象
            name : 'strive_or_die', 
            age : 23,
            run : function () { 
                return 'run 了';
            }
          },
];
alert(arr);	//元素是一个对象。
对象中的方法

转换方法

对象或数组都具有toLocaleString()、toString()和 valueOf()方法。其中toString()和 valueOf()

无论重写了谁,都会返回相同的值。数组会讲每个值进行字符串形式的拼接,以逗号隔开。

var arr= [' strive_or_die ',23,'前端工程师']; // 字面量数组 
alert(arr); // 隐式调用了toString()
alert(arr.toString()); // 和valueOf() 返回一致
alert(arr.toLocaleString()); // 返回值和上面两种一致

默认情况下,数组字符串都会以逗号隔开。如果使用 join()方法,则可以使用不同的分隔符来构建这个字符串。

var arr = ['strive_or_die', 23, '前端工程师'];
alert(arr.join('|')); //显示: strive_or_die|23|前端工程师

注意:如果数组中的某一项的值是null或者undefined,那么该值在join()、toLocaleString()、toString()和valueOf()方法返回的结果中以空字符串表示。

栈方法

  ECMAScript 数组提供了一种让数组的行为类似于其他数据结构的方法。也就是说,可以让数组像栈一样,可以限制插入和删除项的数据结构。栈是一种数据结构(后进先出),也就是说最新添加的元素最早被移除。而栈中元素的插入(或叫推入)和移除(或叫弹出),只发生在一个位置——栈的顶部。ECMAScript 为数组专门提供了 push()和 pop()方法。

  push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。而 pop()方法则从数组末尾移除最后一个元素,减少数组的 length 值,然后返回移除的元素。

var arr = ['strive_or_die', 23, '前端工程师']; //字面量声明
alert(arr.push('广州')); //数组末尾添加一个元素,并且返回长度
alert(arr); // 查看数组
arr.pop(); // 移除数组末尾元素,并返回移除的元素,返回'广州'
alert(arr); // 查看元素

队列方法

  栈方法是后进先出,而列队方法就是先进先出。列队在数组的末端添加元素,从数组的前端移除元素。通过 push()向数组末端添加一个元素,然后通过 shift()方法从数组前端移除一个元素。

var arr = ['strive_or_die', 23, '前端工程师']; //字面量声明
alert(arr.push('广州')); //数组末尾添加一个元素,并且返回长度
alert(arr); // 查看数组
alert(arr.shift()); // 移除数组开头元素,并返回移除的元素,返回'strive_or_die'
alert(arr); // 查看数组

  ECMAScript 还为数组提供了一个 unshift()方法,它和 shift()方法的功能完全相反。unshift()方法为数组的前端添加一个元素

var arr = ['strive_or_die', 23, '前端工程师']; //字面量声明 
alert(arr.unshift('广州','深圳')); //数组开头添加两个元素
alert(arr); // 查看数组
alert(arr.pop()); // 移除数组末尾元素,并返回移除的元素
alert(arr); // 查看数组

注意:IE 浏览器对 unshift()方法总是返回 undefined 而不是数组的新长度。

重排序方法

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

  • reverse() 逆向排序
var arr = [1,2,3,4,5]; // 数组
alert(arr.reverse()); // 逆向排序方法,返回排序后的数组
alert(arr); // 源数组也被逆向排序了,说明是引用!!!
  • sort() 从小到大排序
var arr = [4,1,7,3,9,2]; //数组
alert(arr.sort()); // 从小到大排序,返回排序后的数组
alert(arr); // 源数组也被从小到大排了,说明是引用!!!

  sort 方法的默认排序在数字排序上有些问题,因为数字排序和数字字符串排序的算法是一样的。我们必须修改这一特征,修改的方式,就是给sort(参数)方法传递一个函数参数。如下所示:

function compare(valueA, valueB) { 
    //数字排序的函数参数 
   if (valueA < valueB) { //小于,返回负数
       return -1;
    } else if (valueA > valueB) { // 大于,返回正数
       return 1;
    } else { // 其 他 , 返 回 0
       return 0;
    }
}
var arr = [0,1,5,10,15];
alert(arr.sort(compare)); // compare函数坐参数,进行传参

操作方法

   ECMAScript 为操作已经包含在数组中的元素提供了很多方法。concat()方法可以基于当前数组创建一个新数组。slice()方法可以基于当前数组获取指定区域元素并创建一个新数组。

concat()方法可以基于当前数组创建一个新数组:

var arr = ['strive_or_die', 23, '前端工程师']; // 当前数组
var arr2 = arr.concat('计算机'); //创建新数组,并添加新元素
alert(arr2); //输出新数组
alert(arr); // 当前数组没有任何变化,不是引用方式!

splice()主要用途是向数组的中部插入元素:

删除:可以删除任意数量的项,只需要指定两个参数:要删除的第一项的位置和要删除的项数;例如:splice(0,2)会删除数组中的前两项。

插入:可以指定位置插入任意数量的项,只需要提供3个参数:起始位置、0(要删除的项)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意过个项。例如,splice(2,0,“read”,“green”)会在当前数组的位置2开始插入字符串"red"和"green"。

替换:可以向指定位置插入任意数量的项,且同事删除任意的项,只需要指定3个参数:其实位置、要删除的y8uansu和要插入的任意数量的项。插入的项数不必与删除的项相等。例如,splice(2,1,“red”,“green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"。

splice 中的删除功能:

var arr = ['strive_or_die', 23, '前端工程师']; // 当前数组
var arr2 = arr.splice(0,2); // 截取前两个元素
alert(arr2); // 返回截取的元素
alert(arr); // 当前数组被截取的元素被删除

splice 中的插入功能:

var arr = ['strive_or_die', 23, '前端工程师']; // 当前数组
var arr2 = arr.splice(1,0,'计算机','广州'); //没有截取,但插入了两条 
alert(arr2); //在第2个位置插入两条
alert(arr); // 输出

splice 中的替换功能:

var arr = ['strive_or_die', 23, '前端工程师']; // 当前数组
var arr2 = box.splice(1,1,100); // 截取了第2条,替换成100
alert(arr2); // 输出截取的23
alert(arr); // 输出数组,23被替换为了100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值