简单了解对象
- 对象也是变量 但是对象可以是 一个变量 也可以使多个变量
- 对象 就是一个数据的集合(复杂数据) 也就是对象的数据类型为引用数据类型
创建对象 字面量方式创建对象
- 字面量形式
- 例 var object = { name: 'zh', age : 22 }
内置构造函数创建
- 通过内置函数构造
- 例 var object = new Object()//对象 var object = new Object({ //非空对象创建 name: 'zh', age : 22 })//
对象内对于 键(key) 的要求
- 键值对也就是key value
- key 名可以是特殊符号 也可以是纯数字
- 推荐符合命名规范(特殊情况特殊处理)
对象数据类型的操作(增删改查)两种语法
- 点语法
- 查询 console.log(Object.key) key 为需要查询的键名 Object 为需要操作的对象
- 增加 Object.newKey = value newKey 需要添加的key value 为新key的值
- 修改 Object.key = newVale newValue 为新值
- 删除 delete Object.key delete 后面更要删除的key
- 中括号语法(数组语法)
- 查询 console.log(Object["key"]) key 为需要查询的键名 Object 为需要操作的对象
- 增加 Object["newKey"] = value newKey 需要添加的key value 为新key的值
- 修改 Object["key"] = newVale newValue 为新值
- 删除 delete Object["key"] delete 后面更要删除的key
- 两者的差异
- 前者不能对数字键名和特殊符号键名进行相关操作
- 假如需要使用变量作为键名 也需要用数组方法
- 在符合命名规范的前提下 两种方法的功能完全相同
for in 循环遍历对象
- 遍历 就是对对象内所有的key进行遍历(就是获取)
- 例
- for (var key in object) { console.log(key, object[key]) }
数组数据类型
- 数组属于引用数据类型
创建数组数据类型
- 使用字面量的方式创建数组
- 和对象一样 应该引用数据类型的创建方法都类似 (应该)
- 例 var array = [1, 2, 3, 4, 5]
- 内置构造函数创建数组
- 和对象创建方法类似 但是不完全一样
- 例 var array = new Array() //创建一个空数组 var array = new Array(5)//创建一个长度为5的数组 var array = new Array(2, 5)//创建一个数组[2, 5]
数组的 length 属性
- length 就是数组的长度 就是说一个数组里面有多少个、或者说多少组数据
- Array.length console.log(Array.length)//可以得到数组Array的长度
数组的 索引 概念
- 索引就是数组内数组的数据的序号
- 索引的值从0开始 且和数据一一对应 也就是说 0位置上就是数组的第一个元素所在的位置
for 循环遍历数组
-
遍历 实际上和数组的索引有关 可以说是建立在索引的基础上
-
例
var array = [1, 3, 4, 6, 7, 8] for (var i = 0; i < array.length; i++){ console.log(array[i]) }i < array.length 是因为索引是从0开始的 而数组的长度是从1开始计数的 i = 0 也是因为数组的索引是从0开始的 假如不从0开始 也就拿不到数组的首位元素
课堂练习
- 求数组内所有成员的和
-
var a = [1, 2, 3, 4, 8] var sum = 0; for (var i = 0; i < a.length; i++) { sum += a[i] }//sum == 18
- 找出数组内最大的数字
-
var a = [1, 2, 3, 4, 8] var sum = 0; for (var i = 0; i < a.length; i++) { if (sum < a[i]) { sum = a[i] } } console.log(sum)
- 找出数组内最大的数字的索引
-
var a = [1, 2, 3, 4, 8] var sum = 0; for (var i = 0; i < a.length; i++) { if (sum < a[i]) { sum = i } } console.log(sum)
数据类型之间的区别
存储的区别
- 基本数据类型是 直接把变量和变量的值 保存在栈内存中 也就是变量内部就是变量的值
- 而引用数据类型 是把变量储存在堆内存中 把指向堆内存的地址和变量名储存在栈内存中 也就是栈内存中实际上储存的变量内部是指向堆内存的地址
赋值的区别
- 基本数据类型: 是 值的传递 可以理解为, 将自己的值 复制一份给另一个变量, 后续修改另一个变量时 与我自身没有任何关系
- 引用数据类型: 是 地址 的传递 可以理解为, 将自己的地址 复制一份 给到另一个变量, 后续修改互相会有影响 因为访问的是同一个地方 只是通过不同的变量访问
比较的区别
- 基本数据类型做比较时, 是拿变量实际的值, 去做对比
- 引用数据类型比较时, 是拿引用地址做对比, 判断是不是执行一个地址
传参的区别
- 基本数据类型 是 值 的传递, 将自身的值 复制一份 传递给函数的形参
- 引用数据类型 是 地址 的传递, 将自身的地址 复制一份 传递给函数的形参
练习
-
- 已知一个排序好的数组
-
将数字按照原有顺序插入到数组内
var a = [5, 2, 3, 4, 1, 6, 9, 7, 15] function add(x) { a.push(x) for (var i = 0; i < a.length; i++) { for (var s = 0; s < a.length; s++) { if (a[s] > a[s + 1]) { var flag = a[s]; a[s] = a[s + 1]; a[s + 1] = flag; } } } return a } var arr = add(8) console.log(arr)
-
-
封装函数, 把数组进行放大十倍的操作
function magnify(a) { var s = [] for (var i = 0; i < a.length; i++) { s.push(a[i] * 10) } return s } var mag = magnify([20, 30, 80, 60]) console.log(mag)
-
-
3 生成一个数组
-
要求: 数组内存储的数据是从 2 开始 的所有 偶数, 要求数组的长度为 30
var ss = []; for (var aa = 2; aa <= 100; aa++) { if (aa % 2 == 0) { if (ss.length < 30) { ss.push(aa) } } } console.log(ss)
-
-
4 利用作业 3 生成的数组, 每 5 个数字求一个平均值, 放在新数组内
-
例子: [2, 4, 6, 8, 10, ..., 60] ---> [6, 16, 26, 36, 46, 56]
var arr4 = ss; var ave = 0 var count = 0; var newArr = []; for (m = 0; m < arr4.length; m++) { count++ if(count == 5){ ave = (arr4[m] + arr4[m-1] + arr4[m-2] + arr4[m-3] + arr4[m-4]) / 5 count = 0 newArr.push(ave) } } console.log(newArr)
-