理解数组
●数组就是一组数据的汇合,用中括号 []示意
●数组也是一种数据类型,属于简单数据类型Array
●数组外面的数据排列是依照肯定顺序排列的,也叫有序的数据汇合
●数组外面所有数据的排列都是依照序号进行排列的
○咱们管 "序号" 叫做 索引 或者 下标
○索引: 从0开始, 顺次+1
●在 [] 外面存储着各种各样的数据,依照程序顺次排好
数组的特点
●数组定义时无需指定数据类型
●数组定义时能够无需指定数组长度
●数组能够存储任何数据类型的数据
创立一个数组
字面量创立一个数组
●间接应用 [] 的形式创立一个数组
// 创立一个空数组var arr1 = []console.log(arr1);// 创立一个有内容的数组var arr2 = [1, 2, 3]console.log(arr2);
内置构造函数创立数组
●应用 js 的内置构造函数 Array 创立一个数组
// 内置构造函数创立数组var arr = new Array()console.log(arr)// 示意创立一个长度为 10 的数组// 每一个地位都应用 empty 填充var arr2 = new Array(10)console.log(arr2)// 此时创立了一个数组, 外部有三个数据, 别离是 10 20 和 30// 此时的 10 不在示意数组的长度, 而是数组内的第一个数据var arr3 = new Array(10, 20, 30)console.log(arr3)
数组的 length属性
●length: 长度的意思
●length 就是示意数组的长度,数组外面有多少个成员,length 就是多少
●length的性能有读写性能
○读
■作用:获取到的就是该数组的长度, 也就是数组内有多少个数据
■语法:数组名.length
○写
■作用:设置该数组的长度
●设置的数字和原始长度一样, 相当于没有设置
●设置的数字比原始长度大, 多进去的地位, 用 empty 补齐
●设置的数字比原始长度小, 从前面开始删除
■语法:数组名.length = 数字
// 数组的 length 属性var arr = [100, 200, 300, 400, 500]// length 获取console.log(arr.length)// length 设置// 和原先长度一样, 相当于没有设置arr.length = 5console.log(arr)// 比原先长度大, 用 empty 补齐arr.length = 100console.log(arr)// 比原先长度小, 从前面开始删除数据arr.length = 3console.log(arr)
数组的索引
●索引,也叫做下标,是指一个数据在数组外面排在第几个的地位
○留神: 在所有的语言外面,索引都是从 0 开始的
●在 js 外面也一样,数组的索引从 0 开始
●索引的性能也有读写能力
○读
■作用:获取数组该索引地位的数据
●如果数组有该索引地位, 那么就是该索引地位的数据
●如果数组没有该索引地位, 那么就是 undefined
■语法:数组[索引]
○写
■作用:给数组的某一个索引地位进行赋值
●如果原先数组中就有该索引地位, 那么就是批改
●如果原先数组中没有该索引地位, 那么就是增加
●如果你设置的索引刚好和 length 一样, 那么就是在最初追加
●如果你设置的索引大于 length, 那么两头空进去的地位用 empty 补齐, 为了保障最初一位的索引肯定是 length - 1
■语法:数组[索引] = 值
// 数组的 索引 属性
var arr = [100, 200, 300, 400, 500]// 索引获取// 获取数组中索引为 2 对应的数据console.log(arr[2])//因为没有索引是100的这个数据,返回的就是undefinedconsole.log(arr[100]) //undefined//索引设置// 因为数组有 [2] 地位, 相当于把 [2] 地位的数据批改了arr[2] = '我是刚来的'console.log(arr)// 因为数组没有 [5] 地位, 相当于增加// 又因为 5 刚好的 length 一样, 就相当于在数组前面追加数据arr[5] = 'hello'console.log(arr)// 因为数组没有 [10] 地位, 相当于增加// 如果只是单纯的增加一个 '世界' 在 [10] 的地位, 那么一共就是 6 个数据,//你设置的最初一个索引又是 [10] , 数组就不对了// 所以, 他为了保障最初一位的索引肯定是 length - 1, 从索引 5 ~ 索引9都用 empty 填充// 保障了长度仍旧是 11arr[10] = '大家好'console.log(arr) //[100, 200, '我是刚来的', 400, 500, 'hello', empty × 4, '大家好']
数组操作案例
案例1 : 求数组内所有数据的和
// 求数组内所有数据的和// 0. 筹备一个数组var arr = [100, 200, 300, 400, 500]// 1. 筹备一个变量, 承受叠加后果var sum = 0// 2. 循环遍历数组, 拿到每一个数字for (var i = 0; i < arr.length; i++) { // 3. 把数组内每一个数据增加到 sum 身上 sum += arr[i]}console.log(sum)
案例2 : 把10 ~ 20 之间的所有数字保留到数组外面
//把10 ~ 20 之间的所有数字保留到数组外面//既然要放到一个数组外面就须要筹备一个空数组用来寄存var arr = []console.log(arr.length); //0//循环遍历失去这些数字for (var i = 10; i <= 20; i++) { console.log(i); //把失去的数组题增加到数组外面 //利用 索引 能够写入的形式来进行增加 // 当你没有这个索引的时候, 是增加 // 当索引刚好和 length 一样的时候, 就是追加 arr[arr.length] = i}console.log(arr);
数据存储
●通过后面的学习咱们晓得。数据类型分为根本数据类型(简略数据类型)和简单数据类型(援用数据类型)
●根本数据类型和简单数据类型最大的区别就是存储上的区别
●咱们的存储空间分为栈和堆
○栈:次要寄存根本数据类型的内容
○堆:次要寄存简单数据类型的内容
●简单数据类型寄存在堆内存中。无序排列, 依据地址来查找(堆空间地址)
根本数据类型在内存中的存储状况
●var num = 100,在内存中的存储状况
●间接在 栈空间 内有存储一个数据
●栈内存: 按序排列, 先来的在栈底, 起初的在栈顶
简单数据类型在内存中的存储状况
var obj = { name: 'Jack', age: 18, gender: '男'}
●简单数据类型的存储
○在堆外面开拓一个存储空间
○把数据存储到存储空间内
○把存储空间的地址赋值给栈外面的变量
数据类型赋值
●根本数据类型赋值
○赋值的时候, 就是间接值的复制
○赋值当前, 两个变量相互之间没有任何关系
○扭转一个变量, 另一个不会发生变化
var n = 10// 把 n 存储的值赋值给了 m 变量var m = nconsole.log(m)console.log(n)m = 20console.log(m)console.log(n)
●简单数据类型赋值
○简单数据类型赋值的时候, 是把变量内存储的地址进行赋值
○赋值当前, 两个变量操作的是一个存储空间
○任意一个变量去扭转存储空间内的数据, 另一个变量看到的一样是扭转当前的
var obj = { name: '武松' }// 把 obj 存储的值复制了一份给了 obj2var obj2 = objconsole.log(obj)console.log(obj2)obj2.name = '宋江'console.log(obj)console.log(obj2)
数据类型比拟
●根本数据类型, 就是 值 和 值 之间的比拟
var n = 10var m = 10console.log(n == m)
●简单数据类型, 是 地址 和 地址 之间的比拟
var o1 = { name: 'Jack'}var o2 = { name: 'Jack'}console.log(o1 == o2) //false
○因为咱们创立了两个对象,那么就会在 堆空间 外面开拓两个存储空间存储数据(两个地址)
○尽管存储的内容是一样的,那么也是两个存储空间,两个地址
○简单数据类型之间就是地址的比拟,所以 obj 和 obj2 两个变量的地址不一样
○所以咱们失去的就是 false