js数据类型之对象object类型(数组与自定义对象)


对象object(数组与自定义对象)

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。

对象只是带有属性和方法的特殊数据类型。

数组

// 数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

var l = [11,'gary',true,11.11];  // 可存储不同类型的元素
typeof l   
'object'   // 数据类型为对象object

l[1]; 	//  支持索引取值
'gary'

l[-1];   //  但是不支持负数

常用方法

方法 说明
.length 数组的大小
.push(ele) 尾部追加元素
.pop() 获取尾部的元素
.unshift(ele) 头部插入元素
.shift() 头部移除元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
.concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素传递给回调函数
.splice() 删除元素,并向数组添加新元素。
.map() 返回一个数组元素调用函数处理后的值的新数组

演示:

准备一个数组:
var ll = [11,33,22,44,66,55];
1、数组的大小.length
ll.length;
6
2、尾部追加元素.push()
ll.push(99);
[11, 33, 22, 44, 66, 55, 99]
3、获取尾部元素.pop()
ll.pop();
99
4、头部增加元素.unshift()
ll.unshift(12);
[12, 11, 33, 22, 44, 66, 55]
5、头部移除元素.shift()
ll.shift();
12

ll
(6) [11, 33, 22, 44, 66, 55]
6、切片.slice()
ll.slice(0,3);
[11, 33, 22]
7、反转.reverse()
ll.reverse()
[55, 66, 44, 22, 33, 11]
8、拼接成字符串.join()  //  与python相反
ll.join('$');   //  以$作为分隔符拼接
'55$66$44$22$33$11'
9、连接数组.concat(相当于python中的extend)
ll.concat([32,34,12]);
[55, 66, 44, 22, 33, 11, 32, 34, 12]    //  连接需要有一个变量接收不修改原数组的元素
10、排序.sort()
ll.sort();
[11, 22, 33, 44, 55, 66]
11、将数组的每个元素传递给回调函数.forEach()
var l2 = [11,22,33,44,55,66];   //  定义一个新的数组
格式:l2.forEach(function(形参){函数体代码},l2);

一个参数:l2.forEach(function(value){console.log(value)},l2);  // console.log相当于python中的print 打印
          11
          22
          33
          44
          55
          66
// 解释:将l2数组的元素循环交给function函数的参数让function函数代码块做处理


两个参数:l2.forEach(function(value,index){console.log(value,index)},l2);
            11 0
            22 1
            33 2
            44 3
            55 4
            66 5
// 第一个参数打印的是元素值,第二个参数打印的是索引值

三个参数:l2.forEach(function(value,index,arr){console.log(value,index,arr)},l2);
            11 0 (6) [11, 22, 33, 44, 55, 66]
            22 1 (6) [11, 22, 33, 44, 55, 66]
            33 2 (6) [11, 22, 33, 44, 55, 66]
            44 3 (6) [11, 22, 33, 44, 55, 66]
            55 4 (6) [11, 22, 33, 44, 55, 66]
            66 5 (6) [11, 22, 33, 44, 55, 66]	
// 第一个参数返回的是元素值,第二个参数返回的是索引值,第三个是元素所在的元组。
12、删除元素,并向数组添加新元素.splice()
两个参数情况:删除指定范围的元素(同样遵循顾头不顾尾)
	eg:ll.splice(0,3);
        (3) [11, 22, 33]	// 删除前三位
        ll
        (3) [44, 55, 66]	// 剩下后三位	


三个参数情况:删除指定范围元素并添加新元素
	eg:ll.splice(0,1,77);   //  删除第一位
        [44]
        ll
        (3) [77, 55, 66]	//   删除第一位44并在这个位置添加了77
13、返回一个数组元素调用函数处理后的值的新数组.map()  
// map 和 forEach相仿

l2.map(function(value,index){return value*2},l2);   // 映射
(6) [22, 44, 66, 88, 110, 132]

自定义对象

//  自定义对象可以看作是python中的字典,但是js中的自定义对象要比python里面的字典操作起来更加方便

// 创建自定义对象
var d1 = {'name':'gary','age':18};
typeof d1;
'object'

d1['name'];
'gary'

d1.name;  // 可通过点(.) 的方式取值更加方便
'gary'

d1.age;
18

// 支持for循环:暴露给外界的也是key键
for(var i in d){
    console.log(i,d[i])
};


// 第二种创建自定义对象的方法 使用关键字:new
eg:
var d2 = new Object()  //  创造出来为空字典
d2.name='gary';  // 添加键值对 'name':'gary'
d2['age'] = 18;  // 添加键值对 'age':18
d2  // 查看自定义对象:{name:'gary',age:18}