- 对象:一种对客观事物的描述,将客观事物以逻辑数据的形式进行描述的过程
无序数据的打包,object对象,标志是{}有序数据的打包,array对象,标志是[] 对象的本质(组成)
键值对数据组成
键和值一一对应,成对出现键和值之间使用冒号连接,键值对之间使用逗号隔开
对象的伪代码:{ 颜色:红色, 身高:180, 体重:150, 发型:板寸 } 对象的意义(作用)
存储数据编程 对象的创建
字面量:var obj = {}构造函数:var obj = new Object() 任何情况下,两个对象都不相等;如果相等了,表示这俩就是一个对象。对象的操作语法
点语法:当对象的属性是具体的值时中括号语法:当对象的属性是变量时 对象的操作
增:
obj.sex = “男”obj[“sex”] = “男” 删:
delete obj.age;delete obj[“age”]; 改
obj.sex = “女”obj[“sex”] = “女” 查
console.log(obj.age)console.log(obj[“age”]) object对象:对象,数据的无序集合,本质是键值对,数据的打包array对象:数组,数据的有序集合,本质是有索引(下标)的数据,数据的打包
一组数据的组合有序,索引,下标:0 ~ 数组的length-1长度,个数,length配合循环,快速解析数组中所有数据 创建数组
字面量:var arr = [];构造函数:var arr = new Array();区别:当有且只有一个数值型数据时,字面量认为这就是一个数据,构造函数认为这是长度 数组的操作
索引+长度:(重点*****)
增:数组的增,其实只是在增加长度,增加长度之后,再给新增加的位置赋值(原则上来说只能在数组的最后新增)删:数组的删,其实只是在缩小长度(原则上来说只能从数组的最后开始删除)改:重新赋值,想改谁,找到索引直接赋值即可查:根据指定索引直接读取数组中数据,配合循环,获取数组中所有数据,索引范围:0~length-1 方法操作:工具而已
方法:属于某个对象的函数。数组的方法:属于数组对象的函数语法,功能,参数,返回值,是否改变原数据数组.push()
最后新增要新增的数据新增之后的数组的长度改变原数据 数组.shift()
首位删除没有参数返回删除的数据改变原数据 数组.unshift()
首位新增添加要新增的数据返回值为新增数据的长度改变原数据 数组.pop()
末尾删除没有参数返回末尾删除的数据改变原数据 数组.slice()
截取指定:从参数1截取到参数2的前一个位置的数据,返回值是截取出的新数组,没有改变老数组var res = arr.slice(3); 参数1:截取索引号2之后的数据,对原数据没有影响var res = arr.slice(3, 5); 截取索引号3-5的数据,对原数据没有影响返回值是截取出的新数组不改变原数据 数组.splice()
删除并替换:参数1:开始删除的位置,参数2:删除的个数,参数3~:要插入到删除位置的数据var res = arr.splice(2); 删除索引号2开始所有数据var res = arr.splice(2, 2); 删除从索引号2开始删除,删除后面2位var res = arr.splice(2, 2, 'hahah');删除从索引号2开始的数据,删除位数为2位,把参数3插入到要删除位置的数据var res = arr.splice(2, 3, "hahah", 123, "abc", "qwe", "as");删除从索引号2开始的数据,删除位数为3位,把参数3要插入到删除位置的数据,可以不对应删除的位数,任意添加var res = arr.splice(3, 0, "abc"); 在索引第3位删除0个数据添加一个数据abc返回删除的数据改变原数据 数组.sort()
排序var arr2 = [3, 8, 67, 5, 89, 66, 51];重新定义一组数组
var res = arr2.sort(function (a, b) {不写函数,默认只能个位数排序
return a - b; 排序});
console.log(arr2); 返回值排序从小到大的顺序排列返回值为从大到小或从小到大排序改变原数据 数组.reverse()
翻转没有参数返回值是原数据的翻转改变原数据 数组.concat()
合并数组var res = arr.concat(5, [1,2,3], "hello");参数为需要合并的数据,数组,字符,数值返回值为原数据+合并的数组数据不改变原数据 数组.join()
连接数据转字符var res = arr.join('~'); 用~连接字符串 符号可任意修改;返回值是字符型数据中间加入设置的连接符未改变原数据 数组的分类
数组是一组数据的组合,一个数组中,尽量存储同类型数据全是字符的数组,字符数组
["a","b","hello","张三"] 全是数值的数组,数值数组
[23,41,25,16,27,38] 全是布尔的数组,布尔数组
[true, true, false, true] 全是对象的数组,对象数组,json数组
[{name:"admin"},{name:"张三"},{name:"李四"}] 全是数组的数组,数组数组,二维数组,多维数组
[[1,2,3],["a","b"],[true],[{}],[[],[[],[]],[]]] json数组和多维数组的结构过于复杂,解析方式
逐层解析 关于计算机的内存存储机制
栈:用来存储指定数据所在堆空间的地址,空间小,稳定,不可修改堆:用来存储具体的数据,空间大,灵活,可以被修改栈和堆:一一对应,一对一,多对一,不能一对多 根据数据在内存中的储存形式划分
引用传递的数据:复杂数据,在内存中,变量存储在栈中,值存储在堆中,栈和堆通过地址产生关联
在复制时,拷贝的是地址。导致修改了新地址的值,会影响老地址的值(新老地址,就是一个地址!)object,array,function 值传递的数据:基本数据,在内存中,变量和值,都存储在栈中,不占堆空间
在复制时,拷贝的是值。导致修改了新数据的值,不会影响老数据的值string,number,boolean,undefined,null 引用传递数据的拷贝方式
浅拷贝:只拷贝地址。修改新数据,会影响老数据
使用=号赋值时,默认的拷贝方式 深拷贝:不拷贝地址,只拷贝值。修改新数据时,不会影响老数据
- 先解析引用传递的数据,解析成值传递的数据,再做拷贝
遍历之后,逐个复制数组采用循环遍历对象采用for-in遍历
对象是无序集合,不能使用循环直接遍历要使用专属的遍历方式:for-in;遍历的是键(key),一般用于非数组对象。
for(var i in obj){
// i 就是 obj 的键
// obj[i] 就是对应的值
}



