回顾 JavaScript
回顾 JavaScript
阅读前建议了解 ECMAScript 是什么?
- 不然你可能会疑惑下面内容 JavaScript 中掺杂的 ECMAScript
- 需要大体了解过 JavaScript
- 主要是对 JavaScript 复习,温故而知新
JavaScript 的词法
ECMAScript 源码文本会被从左到右扫描
并被转换为一系列的输入元素,包括
- token:词法分析器识别过程中需要 标记 (tokens) 以便解析源码文本
- 控制符:格式控制符用于控制对源码文本的解释
- 行终止符:除了空白符之外,行终止符也可以提高源码的可读性,
- 注释:注释用来在源码中增加提示、笔记、建议、警告等信息,可以帮助阅读和理解源码
- 空白符:空白符提升了源码的可读性,并将标记区分开
ECMAScript 定义了一些关键字、字面量、行尾分号补全的规则
自 ECMAScript 1~3 版本标准关键字:abstract, boolean, byte, char, double, final, float, goto, int, long, native, short, synchronized, transient, volatile, null, true, false
ECMAScript 4~6 中的保留关键字
变量操作:
var,const,typeof,void流程控制:
- 分支结构:(
if,else), (switch,case,default) - 循环结构:(
for), (while,do) - 错误处理:(
try,catch,finally), (throw) - 跳出:
break,continue
- 分支结构:(
方法:
function,return,instanceof,yield面向对象编程:
class,new,delete,this,in,extends,super作用域链:
with包及模块管理:
import,export调试:
debugger
未来保留关键字,相对 ECMAScript 6 的未来,其实 ECMAScript 2022,第13版 及以后已全部实现(除 enum)
- 这些关键字在严格模式和非严格模式中均不能使用:
enum - 只在严格模式中被当成保留关键字;
implements,interface,let,package,private,protected,public,static - 以下关键字只在模块代码中被当成保留关键字:
await
字面量分类
空字面量
布尔字面量
数值字面量
对象字面量
- 数组字面量
- 字符串字面量
- 正则表达式字面量
- 模板字面量
ECMAScript 规格提到自动分号补全的三个规则
- 当出现一个
不允许的行终止符或}时,会在其之前插入一个分号 - 当捕获到标识符输入流的结尾,并且无法将单个输入流转换为一个完整的程序时,将在结尾插入一个分号
- 当语句中包含语法中的限制产品后跟一个行终止符的时候,将会在结尾插入一个分号
注意:
- 行终止符可以影响 JavaScript 代码的执行
- 行终止符也会影响自动分号补全的执行
- 在正则表达式中,行终止符会被 \s 匹配
表达式与运算符
表达式
JavaScript 中的基本关键字和常用表达式:
- 类:this, class
- 方法:function, function, yield, yield
- 异步方法:async function, async function*, await
- 字面值:[], {}, /RegExp/i
- 分组操作符:()
左表达式(左边的值是赋值的目标)
- 属性访问符,提供了对对象的属性或方法的访问,比如
object.property,object["property"] - new, new.target
- super
...展开运算符允许在需要多个参数(用于函数调用)或多个元素(用于数组字面量)的地方展开表达式,比如...obj- import.meta 向 JavaScript 模块暴露特定上下文的元数据属性的对象
- 属性访问符,提供了对对象的属性或方法的访问,比如
自增和自减: ++A, --A, A++, A--
一元运算符(只有一个操作数)
- 对象:delete, typeof
+,-,~,!
算术运算符:+, -, *, /, %, **
关系运算符:in, instanceof, <, >, <=, >=
相等运算符:==, !=, =, !
位移运算符:<<, >>, >>>
二进制运算符:&, |, ^
二元逻辑运算符:&&, ||, ??
可选链运算符:?.
条件(三元)运算符:(condition ? ifTrue : ifFalse)
赋值运算符:=, *=, -=, +=, /=, %=, **=, <<=, >>=, >>>=, ^=, &=, |=, &&=, ||=, ??=,
[a, b] = arr, { a, b } = obj逗号运算符:
,
JavaScript 数据类型和数据结构
编程语言都有内置的数据结构,但这些通常因一种语言而异
JavaScript 是一种具有动态类型的动态语言,JavaScript 也是一种弱类型语言,这意味着当操作涉及不匹配的类型时它允许隐式类型转换,而不是抛出类型错误
原始值
所有类型(除了 Object 之外)都定义了直接在语言的最低级别表示的不可变值
- 所有原始类型都可以使用 typeof 运算符测试(除了 null)
- 所有原始类型(除了 null 和 undefined)都有它们相应的对象包装类型,这为处理原始值提供可用的方法
数据结构分类
- Null 类型:
null - Undefined 类型:
undefined - Boolean 类型:
true,false - Number 类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值,
NaN是一个特殊种类的数值 - BigInt 类型:在 Javascript 中是一个数字的原始值,它可以表示任意大小的整数
- String 类型:表示文本数据并编码为 UTF-16 代码单位的 16 位无符号整数值序列
- Symbol 类型:是唯一不可变的原始值并且可以用来作为对象属性的键
- Null 类型:
注意:
- 从概念上讲,undefined 表示没有任何值,null 表示没有任何对象
- null 是一个关键字,但是 undefined 是一个普通的标识符,恰好是一个全局属性
- BigInt 值并不总是更精确的,也不总是比 number 精确,因为 BigInt 不能表示分数,但是可以表示更准确的大整数
- JavaScript 字符串是不可变的,这意味着一旦字符串被创建,就不可能修改它
对象 (object)
在 JavaScript 中,对象是唯一可变的值,事实上函数也是具有额外可调用能力的对象
在 JavaScript 中,对象可以被看作是一组属性的集合
- 数据属性:将键与值相关联
- 访问器属性:将键与两个访问器函数像关联
常用对象
- Date
- Map, Set, WeakMap, WeakSet
- JSON
强制类型转换
- 在期望原始值的地方使用原始强制过程,但对实际类型应该是什么没有强烈的偏好
- 如果值已经是原始值,则此操作不会进行任何转换
- 所有的数据类型,除了 Null, Undefined, Symbol,都有它们各自的强制过程
CLASS
类是用于创建对象的模板,他们用代码封装数据以处理该数据
实际上,类是“特殊的函数”,就像你能够定义的函数声明和函数表达式
- 类声明:要声明一个类,你可以使用带有 class 关键字的类名
- 类表达式:是定义类的另一种方法,类表达式可以命名或不命名
- 使用 extends 扩展子类
- 使用 super 调用超类
注意:
- 函数声明和类声明之间的一个重要区别在于,函数声明会提升,类声明不会
- 类体内部的代码总是在严格模式下执行
回顾 JavaScript的更多相关文章
- Jquery第一篇【介绍Jquery、回顾JavaScript代码、JS对象与JQ对象的区别】
什么是Jquery? Jquey就是一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作 就是封装了JavaScript,能够简化我们写代码的一个JavaScript库 为 ...
- 前端面试回顾---javascript的面向对象
转:https://segmentfault.com/a/1190000011061136 前言 前一阵面试,过程中发现问到一些很基础的问题时候,自己并不能很流畅的回答出来.或者遇到一些基础知识的应用 ...
- 前端知识点回顾——Javascript篇(二)
JavaScript的解析顺序 第一阶段:编译期 寻找关键字声明的变量.函数声明的变量,同时会对变量进行作用域的绑定 var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性. ES ...
- 前端知识点回顾——Javascript篇(六)
fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象. fetch(url, initObj) .then(res=>res.json()) .the ...
- 前端知识点回顾——Javascript篇(五)
DOM 常用的DOM获取方法: node.children 返回子元素节点,没有兼容性问题,动态获取 node.parentNode 获取父节点,没有兼容性问题 node.offsetParent 获 ...
- 前端知识点回顾——Javascript篇(四)
Symbol 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和 ...
- 前端知识点回顾——Javascript篇(三)
数组的冒泡.选择和插入排序法 冒泡排序法(从小到大) function bubble(arr){ for(let i = 0 ;i<arr.length-1;i++){ for(let j = ...
- 前端知识点回顾——Javascript篇(一)
DOM特殊元素获取 document.documentElement //HTML标签 document.head //head标签 document.title //title标签 document ...
- JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾
页面显示照片样式为瀑布流: 上面的div个数可以按照自己安排进行划分.img的分布可以使用模板标签以及自定义模板函数进行排布: 自定义模板函数实现可以看,最后几列:python---django中模板 ...
- 给JavaScript初学者的24条最佳实践
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0 } .fluid-width-video-wrapp ...
随机推荐
- Vue cli路由
上面是将Forecast组件作为了Home的子组件使用,现在我们将其作为一个路由组件使用. 在router/index.js路由系统注册路由: { path: '/forecast', name: ' ...
- Wpf虚拟屏幕键盘
在Wpf使用虚拟键盘有基于osk和tabtip,后者只能在win8和win10之后电脑使用,而且两者在wpf中调用时都必须提升为管理员权限,实际应用中还是不方便. 今天介绍的方法是使用第三方库oskl ...
- Opencv笔记(12)傅里叶变换
在之前了解的OpenCV为我们实现的图像变换,这些本质上是从图像到输出图像的映射,即输入仍是一幅图像.本章的傅里叶变换,输出数组的值在含义上和原图像的强度值大不相同,是输入图像的频域表示. cv::d ...
- k8s——pod的资源配置文件详解(manifest)
pod的资源配置文件(manifest) 详细介绍pod的资源配置文件(mannifest)的各个字段的含义 元数据 字段 是否必须 类型 含义 由用户提供 备注 name 必须 str pod的名称 ...
- 忘记root密码,破解root密码
破解root用户密码: 1.按e进入内核参数重置界面 2.找到开头Linux的段落,行尾输入rd.break 3.按ctrl+x 进入可选步骤 5.以读写方式挂载sysyroot 修改root密码要挂 ...
- vscode git bash终端配置:“”message": "此项已弃用,配置默认 shell 的新推荐方法是在 `#terminal.integrated.profiles.windows#
当VSCode升级至1.57.1(2021.6.17)时,会出现警告提示:""message": "此项已弃用,配置默认 shell 的新推荐方法是在 `#te ...
- jquery浏览器的上卷高度 节点的创建和写入 节点的删除
// js 的兼容语法 // let scrollT = document.documentElement.scrollTop || document.body.scrollTop; ...
- WIn32 C++ 消息处理函数 问题
这个消息处理这个 Winproc 这个 接收到网络信息 在自己的函数用完后可以选择向系统路由传递这个网络消息接收到的数据原型 你处理完,系统也处理,不想让系统处理可以不将接受到的那几个变量啊数据啊,就 ...
- 夜莺监控发布 v6.7 版本,推送部分商业版功能
熟悉夜莺的小伙伴都知道夜莺分为开源版.专业版.企业版,三个版本良性发展.近期夜莺团队发布了 v6.7 版本,把机器Metadata管理功能推送到了开源版,下面是该功能的简单介绍. 如上图,机器列表页面 ...
- ObjectMapper Json字符串的转换处理
package com.example.demo; import com.example.pojo.User; import com.fasterxml.jackson.annotation.Json ...