js里面万物皆对象。
看,我有很多对象呢。
双十一不购物怎么了?我是有对象的人,我不过光棍节!
一、基本数据类型和复杂数据类型的区别
1、保存的数据个数不同
2、在内存中保存的方式不同
1、基本数据类型在内存单元中保存的是具体值
2、复杂数据类型在内存单元中保存的是具体值的指针
3、复制操作后的结果不同
1、复制数据类型操作实际上是复制内存单元中保存的那个东西
2、基本数据类型复制前后,两个值没有关联
3、复杂数据类型复制前后,两个值实际上是同一个值
二、数组
1、数组的作用
用于保存多个数据
2、数组的声明方式
var arr = new Array(100, 98, 89, 78);
var arr = [100, 98, 89, 78]; // 这种方式是推荐方式,因为书写简便。
3、数组的长度属性
arr.length : 用于获取数组中的数据总个数,是数值类型
4、数组的操作
1、元素:数组中的数据统称为数组的元素
2、索引
① 数组中的每个元素按照索引值排列,索引从零开始,依次递增
② 由于数组中的元素按照索引排列,数组也被称为是一种有序的数据存储方式
③ 利用索引操作元素 :arr[0]
④ 数组最后一个元素的索引值 : arr.length - 1
3、数组的长度操作
① 将数组的length设置为大于实际元素的个数的值,这个值没有意义,平常不会用
② 访问数组中不存在的元素,默认值为undefined
③ 将数组的length设置为1小于实际元素个数的值可以将数组末尾的一些值删除
4、数组的遍历操作 : 使用循环获取数组中的所有元素
var arr = ['a', 'b', 'c', 'b', 'c', 'b', 'c'];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
反向遍历
for (var i = arr.length - 1; i >= 0; i--) {
console.log(arr[i]);
}
5、数组中可以有多种类型的数据,不过推荐一个数组中只保存一种类型的数据。
三、冒泡排序
1、计数法
var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
// 每轮代码执行时需要考虑,如果本轮比较中没有发生交换操作,说明排序完毕了(上一轮)
var count = 0; // 用于记录本轮比较中发生交换的次数
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
// 发生交换,设置计数增加
count++;
}
}
// 当本轮中所有次的比较均执行完毕,检测count的值,如果为0,结束循环
if (count === 0) {
break;
}
}
2、变量控制
var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
// 我们前面发现,本轮中是否进行过交换时决定是否可以跳出的关键点
var flag = true; // 表示假设本轮排序完毕可以结束
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
// 如果进入了if,阻止跳出操作
flag = false;
}
}
// 验证flag的值
if (flag === true) {
break;
}
}
四、数组去重
var arr = [1, 2, 1, 1, 2, 3, 3];
var result = [];
// 1 遍历arr,获取所有元素
for (var i = 0; i < arr.length; i++) {
// 规则:需要使用arr[i]与result中每个元素比较,如果没有一个是相同的,就放入
var count = 0; // 用于保存于arr[i]相同的元素的个数
// 2 遍历result,获取所有元素
for (var j = 0; j < result.length; j++) {
if (arr[i] === result[j]) {
// 如果找到相同的值,设置count++
count++;
}
}
// 如果count为0,说明result中不存在当前值,放入
if (count === 0) {
result[result.length] = arr[i];
}
}
五、数组类型检测方法
第一个博客我大致写了一下数据类型的检测方法,现在我写一下数组类型的检测方法和检测结果。
① typeof : 用于检测大部分基本数据类型,typeof arr 的结果为object
② instanceof 操作符 : arr instanceof Array 的结果为true
③ constructor属性 : arr.constructor === Array 的结果为true
④ Object.prototype.toString.call(数据):能够得到数据的类型名称
Object.prototype.toString.call(arr) 控制台打印的结果为 ‘[object Array]’