JavaScript 复习
JavaScript : 浏览器端JS 主要负责处理客户端页面的交互和表单验证,数据处理...
服务器端js: Node.js 主要负责服务端(服务器服务搭建,服务端渲染,开发一些开发工具 , 中间件...)
共同的特点 :遵循的相同的ECMAScript 标准 (ES5, ES6)
不同点:
- 浏览器端JS : 主要有浏览器的操作,用户交互,DOM操作为主
- 服务器端JS : 主要以服务端服务角色为主,搭建HTTP服务器,文件操作,流操作...
ECMAScript标准语法:
1.变量(存储程序运行时数据的一块内存区域,对应的内存都有唯一的内存地址 ,变量名实际上就是为了方便程序员操作内存数据的一个别名)
- 声明变量
~~~ 1.使用var 关键字 可以变量提升
2.使用let 关键字 不支持变量提升 块级作用域 ~~~
- 声明常量 (ES6以后)
~~~ 使用const 关键字 , 有个小习惯,就是会使用大写的名字标记为常量 ~~~
3.变量命名规则:
~~~~ 1.变量名不能以数字开头
2.变量名只能以:数字,字母,下划线,$ 组成
3.命名要规范,做到见名识义
4.建议使用驼峰命名法
5.对项目文件夹规范:不要使用中文,文件名建议小写,加- 符号分隔
~~~~
2.数据类型:
1.值类型数据(基础类型)
~~~ 1.undefined 2.null (可以查阅一些关于null与undefined区别的文章) 3.boolean 布尔类型 4.number 数字类型 5.string 字符串类型 ~~~
2.引用类型数据(对象类型)
~~~ Object Array Date Symbol Function ~~~
3.怎么检测一个变量的数据类型:
~~~ typeof 只能检测出: undefined null boolean number string function object
instanceof 检测出对应对象实例的构造函数来区分类型([] instanceof Array)
Array.isArray()
Object.prototype.toString.call() (带一定编码技巧的方案) ~~~
3.注释 :
~~~ 单行 //
多行 /* 多行 */ ~~~
4.运算符:
- 赋值运算符
~~~ = += -= *= /= %= ~~~
- 算术运算符
~~~ + - * / % -- ++ ~~~
- 比较运算符
~~~
< >= <= != == === ~~~
- 逻辑运算符
~~~ && 并且 || 或者 ! 非 ~~~
- 位与运算符
~~~ & 两个数值的个位分别相与,同时为1才得1,只要一个为0就为0。 | 两个位只要有一个为1,那么结果都为1。否则就为0 ~~~
5.程序结构:
- 顺序结构 (按照代码从上往下的循序执行)
- 选择结构 (根据条件选择性的执行代码)
- if
- switch
- 三目运算符
- 循环结构 (重复执行某一段代码)
- while
- for
- do...while (无论循环条件是否成立,先执行一次操作)
- for in (主要用于遍历,数组,对象(可以枚举出对象原型上的属性))
- for of (主要用于数值, Map , Set 结构)
~~~ EventLoop : 在JS处理任务时:会根据任务分类:宏任务 , 微任务 (同步 / 异步模式)有所差异 ~~~
- 内置对象 (JavaScript中提供的基础类的各种功能方法)###### Date : 主要提供对日期的操作~~~ getDate() getDate() getDay() getFullYear() getHours() getMilliseconds getMilliseconds() getMinutes getMinutes() getMonth getMonth() getSeconds() getTime() ~~~###### Array:主要提供对数组数据的操作~~~ concat() copyWithin() entries() every() fill() filter() find() findIndex() forEach() includes() indexOf() join() keys() lastIndexOf() length map() pop() push() reduce() reduceRight() reverse() shift() slice() some() sort() splice() ~~~###### String :主要提供对字符串数据的操作~~~ charAt() charCodeAt charCodeAt() codePointAt() concat() String() endsWith() fixed() fontcolor() fontsize() includes() indexOf() italics() lastIndexOf() match() normalize() padEnd() padStart() repeat() replace() search() slice() small() split() startsWith() strike() sub() substr() substring() sup() toLowerCase() toString() toUpperCase() trim() trimLeft() trimRight() ~~~###### RegExp :主要提供正则对象的匹配操作 (重点在于正则表达式的符号:元字符,量词等)~~~ test() exec() ~~~###### Number :主要提供对数字类型数据的操作~~~ toFixed() toString() ~~~###### (不需要实例化)Math :主要提供对相关数学任务的操作~~~ abs() ceil() floor() random() round() cos() sin() tan() atan() max() min() sqrt() pow() ~~~
- this指针:指向当前程序执行时上下文的环境 - > 指向某一个特定对象全局环境:在全局的执行作用域中,this 指向的时window对象 (node.js指向的global对象)在调用某一个对象方法时,指向当前方法所在对象通过on-属性方式绑定的事件 ,this - > 触发事件时的元素使用new 实例化对象时,this指向的时当前创建的新实例对象~~~ new 关键字 在实例化构造函数时做了什么事情: 1.创建一个新的空对象 2.执行构造函数 3.会改变构造函数中内部环境的this指向为刚才创建的新空对象 4.执行构造函数内部的代码 5.设置实例对象的constructor指向为当前的构造函数 ~~~5.箭头函数中,this指向的时定义当前函数时所处上下文环境###### 在执行环境中,改变this指针的方式:~~~ 1.在调用函数时使用 bind() 手动绑定函数指执行环境中的this指向 2.call() 单个传参 3.apply() 数组传参 使用某个对象的身份去调用另一个对象中的方法,其实就是强制改变了被执行方法环境中的this对象 ~~~
- 函数(在程序中可以执行实现特定功能的代码块)具名和匿名函数有参和无参函数可以有返回值 ,使用return 关键字 ,在return 后边的代码将不再执行arguments 函数的实际参数表示伪数组对象(内置)length 函数的形参数量