重学JavaScript系列之一_引用类型

ECMAScript中,引用数据是一种数据结构,用于将数据和功能组织在一起,有时候被称为类

  • ES6中使用Class定义一个类

  • 引用类型的值(对象)是引用类型的一个实例

  • 对象是某个特定引用类型的实例,新对象是使用new操作符跟后面的一个构造函数来创建的,构造函数本身就是一个函数,只不过是处于创建新对象的目的而定义的,如下,创建一个Person类的实例person

    function Person(name,age,sex) {this.name=name;this.age=age;this.sex=sex;
    }
    var person=new Person('Eastboat',18,'man');
    复制代码

Object类型

​ js是基于对象的一门语言,我们看大的大多数引用类型的值都是Object的实例 ,js本身无法做到真正面向对象语言的继承、多态、抽象性,所以我们只能通过他的语言特性去实现这些,每年发布的js版本都吸收借鉴了其他语言的特点,给我们带来了很多实用的帮助。

  1. 创建方式

    • new一个Object对象

      var person=new Object();
      person.name='Eastboat';
      person.sex=18;
      person.age='man';
      复制代码
    • 对象字面量

      var person={name:"Eastboat",age:18,sex:'man'
      }
      //通过此方式创建对象的时候是不会调用Object构造函数的.注:火狐早期版本会调用/*通过对象字面量我们可以很方便的封装我们的数据,成为函数传递大量参数的首选方式
      */function checkPerson(args){if(args.name=='Eastboat'){alert(args.name)}else if(args.age>=18){alert("adult")}else{//......}
      }
      checkPerson({name:"Eastboat",age:12
      })
      复制代码
    • 自定义构造函数,如开篇所示,后续章节会衍生讲解

  2. 访问属性

    • 点语法 obj.key
    • 中括号语法 obj[key] 注: key是以字符串方式存在

Array类型

​ 几乎所有的编程语言都原生支持数组,因为数组是最简单的内存数据结构,但是在js语言中,数组可以保保存不同类型的值。

  1. 创建方式

    • 通过new Array()可以创建和初始化数组,当然,这并不是最好的创建方式

      var arr01 = new Array()   //声明初始化一个空数组
      var arr02 = new Array(10)  //指定length为10的数组
      var arr03 = new Array('a','b','c')  //直接将元素作为参数传递给构造器
      复制代码
    • 通过字面量方式创建初始化

    var arr=['a','b',3,4,5]
    复制代码
  2. 特点

    • length属性不是只读的,可以通过length去往数组末尾移出或添加新的一项
    • 数组最后一项的索引始终是length-1
  3. 类型监测

if(value instanceof Array) {// 此方法问题只能在一个全局执行环境中存在,如果页面包含多个框架那就存在多个全局执行环境// 从而存在两个以上不同版本的Array构造函数
}if(Array.isArray(value)) {//ECMAScript5新增的方法,最终可以确定某个值是不是数组
}
复制代码
  1. 常用方法

    • 添加元素 push/unshift

      //在JavaScript中数组是一个可以修改的对象,如果添加元素,数组会动态的增长
      var arr = [0,1,2,3,4];
      arr[arr.length]=5  //  arr=> [0,1,2,3,4,5]//push方法:插入元素到末尾同时返回新的长度
      var arr = [0,1,2,3,4];
      arr.push('a','b') //  arr=>  [0,1,2,3,4,'a','b']//插入元素到首位
      var arr = [0,1,2,3,4];
      for(var i=arr.length; i>0; i--) {arr[i]=arr[i-1]
      }
      arr[0]=-1  //变量腾出首位位置,然后插入数据  arr=> [-1,0,1,2,3,4]//unshift方法: 把元素插入到数组的首位并返回新的长度
      var arr= [0,1,2,3,4];
      arr.unshift(-1)  // arr=> [-1,0,1,2,3,4]
      复制代码
    • 删除元素 pop/shift

      //从数组首位删除元素
      var arr = [0,1,2,3,4];
      for(var i=0; i<arr.lenght; i++) {arr[i]=arr[i+1]  //左移一位,数组长度未改变,多出一个undefined  [1,2,3,4,undefined]
      }
      //pop方法:   删除末尾元素并返回被删除的元素 ,结合push我们可以模拟基本的栈-数据结构// shift方法 : 删除首位元素并返回被删除的元素 ,结合unshift我们可以模拟基本的队列-数据结构
      var arr = [0,1,2,3,4];
      console.log(arr.shift())  // 0
      复制代码
    • 任意位置添加和删除元素 splice

      ```javascript
      /*splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。   两个参数表示删除元素参数一表示起始索引参数二表示删除的元素个数以下表述从索引为2的元素开始删除三个元素
      */
      var arr = [0,1,2,3,4];
      arr.splice(2,3)   //  arr=> [0,1]/*三个参数表示添加元素参数一表示插入元素的索引参数二表示删除的元素个数参数三表示添加到数组中的值以下表述从索引为4的元素开始删除0个元素,往后插入5,6,7,8*/var arr = [0,1,2,3,4];arr.splice(arr.length,0,5,6,7,8);   //arr=> [ 0, 1, 2, 3, 4, 5, 6, 7,8 ]```
      复制代码
    • 合并数组 concat

      var arr1 = 0;
      var arr2 = [1,2,3,4,5];
      var arr3 = [11,22,33]'
      var res = arr3.concat(arr2,arr3) //  [11,22,33,1,2,3,4,5,0]
      复制代码
    • 迭代器函数 我会单独在一个章节叙述,包括ES6新增的方法 ​

重学JavaScript系列之一_引用类型相关推荐

  1. 重学JavaScript系列——(六)集合引用类型

    重学JavaScript系列--(六)集合引用类型 博主以扎实JavaScript基础为目的,以<JavaScript高级程序设计(第四版)>为核心参考资料,以一个"复习者&qu ...

  2. 重学JavaScript系列——(四)变量、作用域与内存

    重学JavaScript系列--(四)变量.作用域与内存 博主以扎实JavaScript基础为目的,以<JavaScript高级程序设计(第四版)>为核心参考资料,以一个"复习者 ...

  3. 重学JavaScript深入理解系列(六)

    JavaScript深入理解--闭包(Closures) 概要 本文将介绍一个在JavaScript经常会拿来讨论的话题 -- 闭包(closure).闭包其实已经是个老生常谈的话题了: 有大量文章都 ...

  4. 重学JavaScript深入理解系列(一)

    JavaScript深入理解--执行上下文(Execution Context) 定义 每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文. 执行上下文(简称:EC) 以 ...

  5. go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数

    1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构.将一段功能复杂.很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性. 在 Go 语言中,函数可以分为两种: 带 ...

  6. c++ gdb 绑定源码_2020重学Go系列:30. 非常详细的 Go 语言 GDB 调试指南

    做为新手,熟练掌握一个好的调试工具,对于我们学习语言或者排查问题的时候,非常有帮助. 你如果使用 VS Code 或者 Goland ,可以直接上手,我就不再写这方面的文章了. 其实相比有用户界面的 ...

  7. 从头再学 JavaScript 系列前言

    说实话想写这个系列已经很久了,对于每一个学习前端的同学来说,JavaScript 都是必须要掌握的,但是实际上对很多同学而言,特别是刚入门或者入门时间不长的同学,对 JS 的认识并不深.大部分仅仅停留 ...

  8. 重学网络系列之(Ping与网关)

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger 种一棵树最好的时间是十年前,其次是现在 叨絮 网关,路由,其 ...

  9. 《重学Java系列》之 泛型(下)

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/103302194] 在 < ...

最新文章

  1. python3下关于copy和deepcopy中的区别
  2. python 爬虫ip代理
  3. kubeadm集群修改k8s证书时间到99年
  4. 【面试】Java集合篇--图解HashMap的put方法的具体流程
  5. Linux shell 的字符串截取
  6. 如何成为一位黑客 ( How To Become A Hacker )
  7. oracle ocx加载错误,flash9.ocx 加载错误解决方法
  8. 阿里云何云飞:如何利用云原生技术在AIoT领域成功落地 | 云栖大会
  9. 普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化
  10. laravel文件上传与下载
  11. python sendto函数_python socket编程
  12. java读取pdf的文字、图片、线条和对应坐标
  13. 某同学:1年经验和1本软考证书,很迷茫~
  14. 现在很迷茫怎么办啊?
  15. python中的ascii码是啥_python ascii码到u
  16. ECS弹性云服务器常用端口、安全组
  17. esp8266_arduino源码
  18. 测试用例设计(等价类、边界值、因果图、判定表、正交实验)
  19. 压缩算法:字符串(JSON)压缩和解压【JDK之Deflater压缩与Inflater解压】
  20. 元宇宙版权保护的相关调查:韩国视角

热门文章

  1. Linux用户基础操作入门
  2. 骑马与砍杀服务器修复,骑马与砍杀修复存档损坏的办法
  3. ddt-TypeError: test_add_department_1() missing 3 required positional arguments
  4. 北京科技大学计算机与通信工程学院计算机科学与技术系导师研究方向,北京科技大学计算机科学与技术系硕士生导师孙昌爱_计算机考研导师...
  5. 软件测试入坑建议:新手零基础怎么入门软件测试?你还缺这几份资料!
  6. b/s模式的服务器性能监控系统,基于B/S模式的PC监控系统及方法
  7. 六年级下册百分数计算题_六年级数学上册期末试卷(附答案)
  8. javaee怎么做到只有登录才可以进网页_java初学者,应该怎么去学习?(建议收藏)...
  9. 电脑任务栏跑到右边去了_手把手教你用U盘安装Win10系统?学会了再也不用去跑电脑店了...
  10. matlab 0到正无穷求和,1/k!k从0到无穷求和是多少