6.对象Object
对象 Object
对象的概念及操作
对象是一组无序的键值对,是带有属性和方法的集合。
通俗讲,对象就是无序的数据集合。
属性是与对象相关的值,方法是能够在对象上执行的动作。
调用:对象.属性 对象.方法()
对象的作用:用于在单个变量中存储多个值。
定义对象:
var obj1 = { };
obj1.name = '小错';
obj1.age = 18;
obj1.sayHi = function (){
alert('hi,大家好');
}
console.log( obj1.name );
obj1.sayHi( );
var obj2 = new Object();
obj2.name = '小错';
obj2.age = 18;
obj2.sayHi = function (){
alert('hi,大家好');
}
console.log( obj2.name );
obj2.sayHi( );
对象字面量:(JSON对象格式)
var obj = { 键:值, 键:值 ...... };
键:一般用双引号引起来(不用引号也可以)
值:可以是任意类型的数据
var obj = {
name: '小错',
age: 18,
sayHi: function (){
alert('hi,大家好');
}
}
对象类型可以动态添加属性和方法!
简单类型不可以添加属性和方法!
数组 Array
数组的概念及操作
数组,是有序的元素序列。
通俗讲,数组就是有序的数据集合。
数组属于对象类型。
数组的作用:用于在单个变量中存储多个值。
创建数组:
var arr1 = [ ];
var arr2 = new Array( );
var arr3 = new Array( size );
var arr4 = new Array( el1, el2, el3 ... );
基本操作:
var arr5 = ['a', 'b', 'c'];
访问数组元素:arr5[0]、arr5[1]、arr5[2]
中括号里的数字为数组的索引值,数组的索引总是从0开始!
设置数组元素:arr5[1] = 2; arr5[4] = 5;
获取数组的长度(数组中元素的个数):arr5.length
数组的操作方法:
push() 在数组的后面添加(单个或多个)新元素,返回数组新的长度
pop() 删除数组的最后一个元素,返回被删除的元素
unshift() 在数组的前面添加(单个或多个)新元素,返回数组新的长度
shift() 删除数组的第一个元素,返回被删除的元素
splice() 可以对数组进行增、删、改,返回一个数组(被删除的元素)
删除n项:arr.splice(起始位置,n)
增加元素:arr.splice(起始位置,0,添加1,添加2......)
修改元素:arr.splice(起始位置,2,替换1,替换2)
sort() 将数组进行排序,返回数组
arr.sort(); //默认按照字符排序
reverse() 将数组进行倒转,返回数组
arr.reverse();
以上方法都会改变原数组!
slice() 从数组中拷贝一部分,返回新数组
arr.slice(1,4) 包含索引为1的元素,不包含索引为4的元素(拷贝索引为 1 2 3 的元素)
concat() 用于合并数组,返回新数组
arr.concat(arr1,arr2......)
toString() 将数组转成字符串,返回字符串
join() 将数组转成字符串,参数为分隔符,返回字符串
以上方法都不会改变原数组!
数组的遍历:
for 循环
for/in 循环
没有循环条件,自动取出下标,下标为字符串
一般用于遍历对象,不推荐数组使用
对象数组/二维数组
var arr1 = [
{name: '小明', age: 18},
{name: '小红', age: 18},
{name: '小东', age: 19}
];
var arr2 = [
[1,2,3],
[4,5,6],
[7,8,9]
];
基本类型和引用类型
基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。
基本类型:number、string 、boolean、null和undefined
基本数据类型是保存在栈内存中的简单数据段,是按值访问的,可以直接操作保存在变量中的实际值。
var a = 10;
var b = a;
b = 20;
console.log(a);
变量b只是保存了变量a复制的一个副本,所以变量b的改变,对变量a没有影响。
引用类型:对象类型,如 Object 、Array 、Function 等等
引用数据类型是保存在堆内存中的对象。
在JavaScript中不可以直接操作堆内存中的对象,只能操作对象在栈内存中的引用地址。
var obj1 = {name: '老王', age: 28};
var obj2 = obj1;
obj2.name = '老赵';
console.log(obj1.name);
console.log(obj2.name);
var obj2 = obj1; 在栈内存中把堆内存对象的引用地址复制一份给obj2。
意味着 obj1和obj2 指向同一个堆内存对象。
obj2.name = '老赵'; 实际上改变的是堆内存对象。
所以,obj1.name和obj2.name 都是'老赵'。
示例:函数的值传递和引用传递
数组的排序
sort() 将数组进行排序,返回数组
arr.sort(); //默认按照字符排序
arr.sort(function (a,b) { //升序,只能对数值排序
return a-b;
});
arr.sort(function (a,b) { //降序,只能对数值排序
return b-a;
});
冒泡排序:相邻两个数进行比较,大数下沉,小数上浮
function fnSort(arr){
var t = 0;
for( var i = 0 ; i < arr.length-1; i ++ ){ // 控制比较轮数
for( var j = 0; j < arr.length-1-i ; j++ ){ //每一轮比较次数
if( arr[j] > arr[j+1] ){
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
return arr;
}