js 基本数据类型 和 引用数据类型 对象 数组的简单了解

140 阅读3分钟

简单了解对象

  • 对象也是变量 但是对象可以是 一个变量 也可以使多个变量
  • 对象 就是一个数据的集合(复杂数据) 也就是对象的数据类型为引用数据类型

创建对象 字面量方式创建对象

  • 字面量形式
    • 例 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开始 也就拿不到数组的首位元素

课堂练习

  1. 求数组内所有成员的和
  •   var a = [1, 2, 3, 4, 8]
            var sum = 0;
                  for (var i = 0; i < a.length; i++) {
                           sum += a[i]
                      }//sum == 18
    
  1. 找出数组内最大的数字
  •       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)
    
  1. 找出数组内最大的数字的索引
  •       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)
    

数据类型之间的区别

存储的区别

  • 基本数据类型是 直接把变量和变量的值 保存在栈内存中 也就是变量内部就是变量的值
  • 而引用数据类型 是把变量储存在堆内存中 把指向堆内存的地址和变量名储存在栈内存中 也就是栈内存中实际上储存的变量内部是指向堆内存的地址

赋值的区别

  • 基本数据类型: 是 值的传递 可以理解为, 将自己的值 复制一份给另一个变量, 后续修改另一个变量时 与我自身没有任何关系
  • 引用数据类型: 是 地址 的传递 可以理解为, 将自己的地址 复制一份 给到另一个变量, 后续修改互相会有影响 因为访问的是同一个地方 只是通过不同的变量访问

比较的区别

  • 基本数据类型做比较时, 是拿变量实际的值, 去做对比
  • 引用数据类型比较时, 是拿引用地址做对比, 判断是不是执行一个地址

传参的区别

  • 基本数据类型 是 值 的传递, 将自身的值 复制一份 传递给函数的形参
  • 引用数据类型 是 地址 的传递, 将自身的地址 复制一份 传递给函数的形参

练习

    1. 已知一个排序好的数组
    • 将数字按照原有顺序插入到数组内

        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)
      
    1. 封装函数, 把数组进行放大十倍的操作

        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)