javascript 高级 笔记整理

蓝咒 提交于 2020-02-03 22:44:11

目标

  • 理解面向对象开发思想

  • 掌握 JavaScript 面向对象开发相关模式

  • 掌握在 JavaScript 中使用正则表达式


 

JavaScript 的组成

  • ECMAScript - 语法规范

    • 变量、数据类型、类型转换、操作符

    • 流程控制语句:判断、循环语句

    • 数组、函数、作用域、预解析

    • 对象、属性、方法、简单类型和复杂类型的区别

    • 内置对象:Math、Date、Array,基本包装类型String、Number、Boolean

  • Web APIs

    • BOM

      • onload页面加载事件,window顶级对象

      • 定时器

      • location、history

    • DOM

      • 获取页面元素,注册事件

      • 属性操作,样式操作

      • 节点属性,节点层级

      • 动态创建元素

      • 事件:注册事件的方式、事件的三个阶段、事件对象


 

 

面向对象与面向过程:

  • 面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊

  • 面向对象就是找一个对象,指挥得结果

  • 面向对象将执行者转变成指挥者

  • 面向对象不是面向过程的替代,而是面向过程的封装

面向对象的特性:

  • 封装性

  • 继承性

  • [多态性]抽象


prototype对象

JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。 这个对象的所有属性和方法,都会被构造函数的所拥有。

这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上

 

构造函数、实例、原型三者之间的关系

所有函数都有 prototype 属性对象。

    • Object.prototype

    • Function.prototype

    • Array.prototype

    • String.prototype

    • Number.prototype

    • Date.prototype

    • ...


 

blind call apply 对象

 是函数的方法。 可以改变函数内this的指向对象

  • call 和 apply 特性一样

    • 都是用来调用函数,而且是立即调用

    • 但是可以在调用函数的同时,通过第一个参数指定函数内部 this 的指向

    • call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可

    • apply 调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递

    • 如果第一个参数指定了 null 或者 undefined 则内部 this 指向 window

  • bind

    • 可以用来指定内部 this 的指向,然后生成一个改变了 this 指向的新的函数

    • 它和 call、apply 最大的区别是:bind 不会调用

    • bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递

        1. 在 bind 的同时,以参数列表的形式进行传递

        1. 在调用的时候,以参数列表的形式进行传递

      • 那到底以谁 bind 的时候传递的参数为准呢还是以调用的时候传递的参数为准

      • 两者合并:bind 的时候传递的参数和调用的时候传递的参数会合并到一起,传递到函数内部

高阶函数

  • 函数可以作为参数

  function eat (callback) {
  setTimeout(function () {
  console.log('吃完了')
  callback()
  }, 1000)
  }

  eat(function () {
  console.log('去唱歌')
  })

 

  • 函数可以作为返回值

  function genFun (type) {
  return function (obj) {
  return Object.prototype.toString.call(obj) === type
  }
  }

  var isArray = genFun('[object Array]')
  var isObject = genFun('[object Object]')

  console.log(isArray([])) // => true
  console.log(isArray({})) // => true

 

函数闭包

 

闭包就是能够读取其他函数内部变量的函数, 由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成 “定义在一个函数内部的函数”。 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用途:

  • 可以在函数外部读取函数内部成员

  • 让函数内成员始终存活在内存中

 


 

正则表达式

正则表达式的作用

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)

  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)

  3. 强大的字符串替换能力(替换)

正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强

  2. 可以迅速地用极简单的方式达到字符串的复杂控制

  3. 对于刚接触的人来说,比较晦涩难懂

常用元字符串

元字符说明
\d 匹配数字
\D 匹配任意非数字的字符
\w 匹配字母或数字或下划线
\W 匹配任意不是字母,数字,下划线
\s 匹配任意的空白符
\S 匹配任意不是空白符的字符
. 匹配除换行符以外的任意单个字符
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)

限定符

限定符说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

案例

验证手机号:^\d{11}$

验证邮编:^\d{6}$

验证日期 2012-5-01:^\d{4}-\d{1,2}-\d{1,2}$

验证邮箱 xxx@itcast.cn^\w+@\w+\.\w+$

验证IP地址 192.168.1.10 :^\d{1,3}\(.\d{1,3}){3}$

 

创建正则对象

方式1:

var reg = new Regex('\d', 'i');
var reg = new Regex('\d', 'gi');

方式2:

var reg = /\d/i;
var reg = /\d/gi;

标志说明
i 忽略大小写
g 全局匹配
gi 全局匹配+忽略大小写

与正则表达式相关的方法

1.regExp对象

test();

exec();只返回一个匹配到的结果且是数组,不管调用几次都返回第一个结果 ;如果没有匹配的元素就返回null;

2.string对象

match();  str.match( );

replace();替换   字符串的默认使用只替换掉第一个查找到的内容      //去除字符串中的空格

(1)str.replace(/\s/g , '');      (2) str.split( '  ').join(' ');

split();   切割

search();  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!