- 对象:一种对客观事物的描述,将客观事物以逻辑数据的形式进行描述的过程
- 无序数据的打包,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] 就是对应的值 }
【Java script基础学习】对象 - 数组
于 2022-02-28 17:34:10 首次发布
本文详细介绍了JavaScript中的对象和数组的基本概念、创建方式及操作方法,包括对象的键值对、数组的增删改查以及各种数组方法如push、shift、unshift、pop、slice、splice、sort、reverse、concat和join。此外,还讨论了计算机内存存储机制中的栈和堆,以及引用传递和值传递的区别。
摘要由CSDN通过智能技术生成