JavaScript语法基础
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器别称为JavaScript引擎,是浏览器的一部分,广泛用于客户端的脚本语言中,最早在HTML网页上使用的,用于HTML网页增加动态功能。通常JavaScript脚本是通过嵌入在HTML中实现自身的功能。
JavaScript具有以下四个方面特点。
- 是一种解释性脚本语言(代码不进行预编译)。
- 主要用于向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
- 可以直接嵌入HTNL页面,但写成单独的JS文件有利于结构和行为的分离。
- 跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。
JavaScript的语法
区分大小写:与Java一样,变量、函数名、运算符及其他一切东西都是区分大小写的,如变量test与变量TEST是不同的。
变量是弱类型的:与Java和C不同,JavaScript中的变量无特定的类型,定义变量时只用var运算符,可以将它初始化为任意值。
var test = "red" //无分号
var test1 = "pink";
有两种注释类型:单行注释以双杠开头(//);多行注释以单斜杠和星号开头(/*),而以星号和单斜杠结尾(*/)。
数据类型
在JavaScript中,数据类型表示数据的类,JavaScript
语言的每一个值都属于某一种数据类型。JavaScript的数据主要分为以下两类。
值类型(原始值):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(ES6 引入了一种新的元始数据类型,表示独一无二的值)。
引用数据类型(引用值):对象(Object)、数组(Array)、函数(Function)。
类型分类
JavaSript有五种类型,即Undefined、Null、Boolean、Number和String。
类型转换
Number:将变量转化为数字类型
String:将变量转化为字符串类型
Boolean:将变量转化为布尔值类型。Boolean会将非零的数字转化为true,将零转为false。
parseFloat:将变量转化为整数类型。
运算符
赋值运算符
赋值运算符的符号为=,表达式为变量a=值,表示将值赋值给变量a。
算数运算符
算术运算符的符号有+(两值相加)、-(两值相减)、*(两值相乘)、/(两只相除)和%(取余)。
比较运算符
比较运算符的符号有>(大于)、>=(大于或等于)、<(小于)、<=(小于等于)、!=(不等于)、==(值等于)、===(值和类型等于)及!==(值和类型不等于)。
逻辑运算符
一元运算符
二元运算符
二元运算符的符号有+=(a += 3等价于a=a+3)、-=(a-=3等价于a = a-3)、*=(a*=3 等价于 a= a*3)和/=(a/=3 等价于a=a/3)。
运算优先级
算数运算符>比较运算符>逻辑运算符>赋值运算符
分支循环
If条件语句语法
Switch选择语句
for循环
循环输出1000以内的奇数:
九九乘法表:
If多分支语法、
for in遍历
函数方法
数组
遍历数组
字符串操作
字符串的连接
字符串的替换
字符串的切割
正则表达式
对象
Object(对象)是一个以键值对形式存储属性的集合,每个属性有一个特定的名称,以及与名称相对应的值。
对象的声明
在JavaScript中,声明一个对象有两种方法,分别通过赋值new Object()和{}实现。
- new Object(): 声明一个类,然后使用new关键字创建一个拥有独立内存区域和之指向原型的指针的对象。
- {}:对象直接申明法,利用现有值,直接实例化一个对象。
对象的属性
既然是对象,里面就可以包含属性,属性又分为属性名和属性值。在JavaScript中,对象可以动态地操作属性,还可以添加、删除、检测属性。
- 添加属性:为已经存在的对象添加属性。
- 删除属性:可以添加属性,当然也可以删除属性。
- 检测属性:判断某个属性是否存在于此对象中。
对象的方法
对象的遍历
函数
语法格式如下:
递归函数
回调函数
函数的返回值
函数执行完毕后可以有返回值也可以没有返回值,有返回值时可以返回一个值,也可以返回一个数组,还可以返回一个对象。
函数的声明
函数在使用之前需要进行声明。函数有以下三种声明方式:
- 通过函数声明,在程序调用时才能执行;
- 通过匿名函数赋值给变量,调用时可以执行;
- 通过new的方式来声明,不需要调用,直接执行,此种方式不常用。
单例模式
日期函数
ES6字符串
字串的识别
ES6之前判断字符串是否包含字串,用indexOf方法,ES6新增了字串的识别方法。
- Includes():返回布尔值,判断是否找到参数字符串。
- startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
- endsWith:返回布尔值,判断参数字符串是否在原字符串的尾部。
以上三个方法都可以接受两个参数,需要搜索的字符串,和可选的搜索起始的位置索引。
let string = "apple,banana,orange";
string.includes("banana"); // true
string.startsWith("apple"); // true
string.endsWith("apple"); // false
string.startsWith("banana",6) // true
- 这三个方法只返回布尔值,如果需要知道子串的位置,还是得用 indexOf 和 lastIndexOf 。
- 这三个方法如果传入了正则表达式而不是字符串,会抛出错误。而 indexOf 和 lastIndexOf 这两个方法,它们会将正则表达式转换为字符串并搜索它。
Number对象的新方法
Number.isFinite()
用于检查一个数值是否有限的(finite),既不是infinity。
ES6箭头函数
Promise
Promise异步操作有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
Promise对象只有:从pending变为fulfilled和从pending变为rejected的状态改变。
async
语法
async function name([param[, param[, ... param]]]) { statements }
name:函数名称
param:要传递给函数的参数的名称。
statements:函数体语句
返回值
async函数返回一个Promise对象,可以使用then方法添加回调函数。
async函数中可能会有await表达式,async函数执行时,如果遇到await就会先暂停执行,等到触发的异步操作完成后,恢复async函数的执行并返回解析值。
await关键字仅在async function中有效,如果在async function中有效。如果在async function函数体外使用await,你只会得到一个语法错误。
async&awit的用法
async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。
async/await的优点
- 方便级联调用:即调用依次发生的场景;
- 同步代码编写方式:Promise使用then函数进行链式调用,是一种从左向右的横向写法;async/await从上到下,顺序执行。
返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。
正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。
await针对所跟不同表达式的处理方式:
- Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。
- 非 Promise 对象:直接返回对应的值。