01快速入门-02-数组和对象

1、数组

1.1 基本认识

定义数组可以使用关键词 new 来创建数组对象:
var mycars=new Array(); 
var mycars=new Array("Saab","Volvo","BMW");

也可以直接赋值的方式(如下),另外,Java中的数组在固定了长度以后就不可以改变,但是在JS中的数组长度是可以改变的,直接给Array的length赋值就会导致数组大小的变化:
var arr = [1,2 ,3];
arr.length; //3
arr.length = 6;
arr; // [1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // [1, 2]

和Java数组类似的是,JS中的Array也是通过索引访问元素,并且可以赋新值,但是更灵活的是,如果通过索引给Array赋值,索引超出了范围,同样会引起Array大小的变化,这和Java中会报越界异常是不同的。

Array的多维数组和Java类似,元素中又是另外的Array则可形成多维数组,取值也是通过类似 arr[1][2] //取数组中索引1元素(数组)的索引2的元素。

JS中的数组类型的变量可以直接使用各种方法,Java中的数组是需要另外一个叫做Arrays的类提供静态方法来操作。

1.2 常用方法

Array的常用方法:
  • indexOf()
    • 搜索一个指定元素的位置,没找到返回 -1  // arr.indexOf('30'); 返回字符串'30'的索引

  • slice()
    • 截取部分Array元素返回新的Array //arr.slice(0, 3); 返回从索引开始(包含)到索引3(不包含)结束的元素新数组
    • 如果不传递参数,会从头到尾截取所有元素,我们可以利用这一点进行数组的 “复制”

  • push()
    • 在Array末尾添加若干新元素 //arr.push('A', 'B');

  • pop()
    • 在Array最后一个元素删除 //arr.pop();

  • unshift()
    • 在Array头部添加若干元素 //arr.unshift('A', 'B');

  • shift()
    • 把Array第一个元素删掉 //arr.shift();

  • sort()
    • 对Array排序,直接调用,按默认顺序排序 // var arr = ['B', 'C', 'A']; arr.sort(); arr -- > ['A', 'B', 'C']

  • reverse()
    • 把整个Array元素调转方向

  • splice(start, amount, valA, valB ...)
    • 修改Array的万能方法,可以从指定索引(start)开始删除若干(amount)元素,然后再从该位置添加若干元素(valA、valB...)
    • e.g. 从索引2开始删除3个元素,然后再添加两个元素 --> arr.splice(2, 3, 'Google', 'Facebook');
    • e.g. 从索引2开始不删除元素,添加两个元素 --> arr.splice(2, 0, 'Google', 'Facebook');

  • concat()
    • 连接两个Array,返回新的数组(注意,不会改变原数组,而是返回新数组) // arr.concat([1, 2, 3]);

  • join()
    • 把当前Array的每个元素用指定字符连起来,然后返回连接后的字符串
    • e.g. var arr = ['A', 'B', 1, 2]; arr.join('-'); // 'A-B-1-2'

发散思维:
在新生欢迎会上,你已经拿到了新同学的名单,请排序后显示:欢迎XXX,XXX,XXX和XXX同学!
'use strict';
var arr = ['小明', '小红', '大军', '阿黄'];
let arrCopy = arr.slice().sort()
const last = arrCopy.pop()
const notLast = arrCopy.join(',')
alert(`欢迎${notLast}和${last}同学!`);

2、对象

JS中的对象是一种无序的集合数据类型,由键值对组成,是不是很熟悉?没错,根本就和Java中的Map一个样。
var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};

属性的取值可以直接通过“点”来获取,如 xiaoming.name; //小明。这种方式要求变量名必须有效,如果包含特殊字符,需要用单引号括起来,访问也只能使用 [ ' attrName ' ] 来访问。以上两种方式是等同的, xiaoming.name; // --> xiaoming['name'];

实际上,JS对象的所有属性都是字符串,即key都是字符串,但是value可以是任意数据类型(简直就是Map嘛)

访问不存在的属性也不会报错,而是返回 undefined 

JS对象是动态类型,意味着你可以自由地添加或删除属性,如 xiaoming.age = 18; //新增age属性且为18
另,如果要删除属性,使用 delete objName.attrName 的方式就可以了,如 delete xiaoming.age;  //xiaoming.age --> undefined

检测对象是否有某属性,使用 in 操作符,如 'name' in xiaoming; // true 。 不过要注意,in判断这个属性并不一定是你所认为的这个对象的,它完全可能是因为继承得到的,如果判断是对象自身的而不是继承得到的?使用 hasOwnProperty()  // xiaoming.hasOwnProperty('name'); --> true

画外音:如何输出对象中所有属性?
var xm = {
  name: '小明',
  birth: 2000,
  school: 'No.1 Middle School',
  height: 1.70,
  weight: 65,
  score: null
};

for(var i in xm){
  console.log(xm[i]);
}


posted @ 2017-03-21 20:55  Dulk  阅读(315)  评论(0编辑  收藏  举报