JSday08知识点整理

本文深入探讨了JavaScript中的对象遍历方法,如`in`运算符和`for...in`循环,以及数据类型赋值的差异,区分了基本数据类型和复杂数据类型在内存中的存储方式。此外,还详细介绍了数组的创建、长度、索引以及常用方法,如`push`、`pop`、`sort`等,并通过实例展示了冒泡排序的实现过程。
摘要由CSDN通过智能技术生成

1.对象的遍历

// 例子
var obj = {
            name:'laozi',
            age:3000,
            gender:'男',
        }
    //  in 
    //  alert('username' in obj)  // true 
    //  alert('gender' in obj)  
    //  alert('age' in obj)  
    //  alert('class' in obj)  
    //  alert('sayHello' in obj)  
    // 用来判断键是否在对象中  结果是布尔类型 
​
    for(var i in obj){
    // i 是一个临时空间 
    // 第一次 i name  obj['name']
    // 第2次 i age   obj['age']
    // 第3次 i gender   obj['gender']
    // 第4次 i class   obj['class']
    // 第5次 i sayhello   obj['class']
        
    console.log(i,obj[i])
}

2.数据类型赋值的区别

// var a = 100; //在栈内存开辟一个独立的空间
// var b = a; //  先给b在栈内存开辟一个空间 然后a中的100 给到 b 
// 两个空间各自独立 
//'hello' 100 原数据用不改变 
​
// alert(a);  // 100
// alert(b); // 100
​
// b = 200;
// alert(a); //100 修改b 不影响a 
// alert(b); //200 
​
var a = {name:'**'} // 栈内存中开辟空间 起名a  堆内存开辟空间
​
var b = a;  // 栈内存开辟空间b 堆内存的地址赋值给a a b就同时指向一个堆内存地址
console.log(a.name)
console.log(b['name'])
​
b.name = '***'  // 所以修改b 就会影响a
console.log(a.name)
console.log(b['name'])

3.数组

1.创建数组

  • 什么是数组?

  • 字面理解就是 数字的组合

  • 其实不太准确,准确的来说数组是一个 数据的集合

  • 也就是我们把一些数据放在一个盒子里面,按照顺序排好

    [1, 2, 3, 'hello', true, false]
  • 这个东西就是一个数组,存储着一些数据的集合

  • 数组内部之间 用, 隔开

数据类型分类

  • number / string / boolean / undefined / null / object / function / array / ...

  • 数组也是数据类型中的一种

  • 我们简单的把所有数据类型分为两个大类 基本数据类型复杂数据类型

  • 基本数据类型: number / string / boolean / undefined / null

  • 复杂数据类型: object / function / array / ...

  • 数组就是一个 []

  • [] 里面存储着各种各样的数据,按照顺序依次排好

2.字面量创建一个数组

  • 直接使用 [] 的方式创建一个数组

    // 创建一个空数组
    var arr1 = []
    ​
    // 创建一个有内容的数组
    var arr2 = [1, 2, 3]

3.内置构造函数创建数组

  • 使用 js 的内置构造函数 Array 创建一个数组

    // 创建一个空数组
    var arr1 = new Array()
    ​
    // 创建一个长度为 10 的数组
    var arr2 = new Array(10)
    ​
    // 创建一个有内容的数组
    var arr3 = new Array(1, 2, 3)

4.数组的 length

  • length: 长度的意思

  • length 就是表示数组的长度,数组里面有多少个成员,length 就是多少

    // 创建一个数组
    var arr = [1, 2, 3]
    ​
    console.log(arr.length) // 3

5.数组的索引

  • 索引,也叫做下标,是指一个数据在数组里面排在第几个的位置

  • 注意: 在所有的语言里面,索引都是从 0 开始的

  • 在 js 里面也一样,数组的索引从 0 开始

    // 创建一个数组
    var arr = ['hello', 'world']
  • 上面这个数组中,第 0 个 数据就是字符串 hello第 1 个 数据就是字符串 world

  • 想获取数组中的第几个就使用 数组[索引] 来获取

    var arr = ['hello', 'world']
    console.log(arr[0]) // hello
    console.log(arr[1]) // world

6.数据类型之间储存的区别

  • 既然我们区分了基本数据类型和复杂数据类型

  • 那么他们之间就一定会存在一些区别

  • 他们最大的区别就是在存储上的区别

  • 我们的存储空间分成两种

  • 栈: 主要存储基本数据类型的内容

  • 堆: 主要存储复杂数据类型的内容

7.基本数据类型在内存中的存储情况

  • var num = 100,在内存中的存储情况

  • 直接在 栈空间 内有存储一个数据

8.复杂数据类型在内存中的存储情况

  • 下面这个 对象 的存储

    var obj = {
      name: 'Jack',
      age: 18,
      gender: '男'
    }
  • 复杂数据类型的存储

    1. 在堆里面开辟一个存储空间

    2. 把数据存储到存储空间内

    3. 把存储空间的地址赋值给栈里面的变量

  • 这就是数据类型之间存储的区别

9.数组的常用方法

  • 数组是一个复杂数据类型,我们在操作它的时候就不能再想基本数据类型一样操作了

  • 比如我们想改变一个数组

    // 创建一个数组
    var arr = [1, 2, 3]
    ​
    // 我们想把数组变成只有 1 和 2
    arr = [1, 2]
    • 这样肯定是不合理,因为这样不是在改变之前的数组

    • 相当于心弄了一个数组给到 arr 这个变量了

    • 相当于把 arr 里面存储的地址给换了,也就是把存储空间换掉了,而不是在之前的空间里面修改

    • 所以我们就需要借助一些方法,在不改变存储空间的情况下,把存储空间里面的数据改变了

1.push

push() 添加数据 返回值 是添加数据之后 新数组的长度

2.pop

pop() 删除数据 返回值 是删除的数组的最后的那一个数据

3.unshift

unshift() 添加数据 返回值 是添加数据之后 新数组的长度

4.shift

shift()删除数据 返回值 是删除的数组的第一个数据

5.reverse

不是降序 仅仅是 反转

6.sort

sort() 按照每个数据 一位一位的对比 排序

7.splice

splice() 专门用来截取数组

8.concat

语法: 原始数组.concat(数1, 数2, 数据, ...)

作用: 进行数组拼接, 把参数的所有数组或者数据, 拼接在原始数组身上

返回值: 拼接好的数组

和 push 的区别

改变原始数组

直接改变原始数组

不会改变原始数组

插入数据

直接把数据插入

如果遇到数组, 会把数组拆开, 把每一个数据依次插入

9.join

join() 数组=>字符串

语法: 数组.join('连接符')

作用: 使用连接符, 把数组内的每一个数据连接成一个字符串(不写默认使用 逗号)

返回值: 连接好的字符串

10.slice

语法: 数组.slice(开始索引, 结束索引) [开始的索引,结束的索引)

参数特点:

包前不包后, 包含开始索引位置数据, 不包含结束索引位置数据

开始所以不填, 默认是 0, 结束索引不填, 默认是 length

可以填写负整数, 表示倒数第几个, 其实就是 length + 负整数

作用: 截取数据的部分内容

返回值: 必然是一个新数组

内部就是截取出来的部分内容

和 splcie 的区别

改变原始数组

splice 改变原始数组

slice 不改变原始数组

参数

splice(开始索引, 多少个)

slice(开始索引, 结束索引)

11.indexOf

语法:

数组.indexOf(数据)

数组.indexOf(数据, 开始索引)

作用: 从前到后检索该数据第一次在该数组内出现的位置

返回值:

如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置

如果在数据内没有找到该数据, 那么就是 -1

12.lastIndexOf

语法:

数组.lastIndexOf(数据)

数组.lastIndexOf(数据, 开始索引)

作用: 从后向前检索该数据第一次在该数组内出现的位置

返回值:

如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置

如果在数据内没有找到该数据, 那么就是 -1

10.冒泡排序

// 红球  1-33   6个
​
// 18 2 20 33 1 13
​
// 蓝球  1-16   1
// 5
​
//  1 2 13 18 20 33 5 
​
// var balls = [18,2,20,33,1,13]  // 1 2 13 18 20 33
// 2 18 20 1 13 33  第一趟
// 2 18 1 13 20 33  第二趟
// 2 1  13 18 20 33 第三趟
// 1 2  13 18 20 33 第四趟 
​
// 好几趟 
// 每趟好几次 
// 嵌套循环 外边的循环控制趟
// 里边的循环控制 交换次数 
// 下一次一定比上一次少一趟 
​
// var a = 10;
// var b = 20;
// var temp = 0;
// temp = a;
// a = b;
// b = temp;
​
// a = a + b  // a = 30 
// b = a - b  // b = 10 
// a = a - b  // a = 20 
// 长度位6 最多6趟  
// 第一趟次数最多  因为是两两比较 最多5次
var balls = [18, 2, 20, 33, 1, 13]
for (var i = 0; i < balls.length - 1; i++) {
    for (var j = 0; j < balls.length - 1 - i; j++) {
        if (balls[j] > balls[j + 1]) {
            var num = balls[j];
            balls[j] = balls[j + 1];
            balls[j + 1] = num;
        }
    }
    document.write(balls + '<br />')
}
document.write('交换完成以后为' + balls);
​
// 口诀  
// 双层for 循环 一层少一次
// 里层减外层 变量相交换 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值