Bot in Discord with discord.js (2)
作者:互联网
Bot in Discord with discord.js (2)
Chapter 3 - JavaScript 介绍
JS 基本介绍
以下内容来自 runoob.com。感谢。侵删。
数组(Array)字面量 定义一个数组:
[40, 100, 1, 5, 25, 10]
对象(Object)字面量 定义一个对象:
{firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
函数(Function)字面量 定义一个函数:
function myFunction(a, b) { return a * b;}
JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值:
var x, length
x = 5
length = 6
JavaScript 语句用于向浏览器发出命令。
语句是用分号分隔:
x = 5 + 6;
y = x * 10;
双斜杠 // 后的内容将会被忽略。
/*
和 */
所包裹起来的代码块会被忽略。
JavaScript 语句可以写在函数内,函数可以重复引用:
引用一个函数 = 调用函数(执行函数内的语句)。
function myFunction(a, b) {
return a * b; // 返回 a 乘以 b 的结果
}
JavaScript 中,常见的是驼峰法的命名规则,如 lastName (而不是lastname)。
JavaScript 语句通常以一个 语句标识符 为开始,并执行该语句。
语句标识符是保留关键字不能作为变量名使用。
下面列出了 JavaScript 语句标识符 (关键字) :
- break:用于跳出循环。
- catch:语句块,在 try 语句块执行出错时执行 catch 语句块。
- continue:跳过循环中的一个迭代。
- do ... while:执行一个语句块,在条件语句为 true 时继续执行该语句块。
- for:在条件语句为 true 时,可以将代码块执行指定的次数。
- for ... in:用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
- function:定义一个函数
- if ... else:用于基于不同的条件来执行不同的动作。
- return:退出函数
- switch:用于基于不同的条件来执行不同的动作。
- throw:抛出(生成)错误 。
- try:实现错误处理,与 catch 一同使用。
- var:声明一个变量。
- while:当条件语句为 true 时,执行语句块。
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = "John"; // 现在 x 为字符串
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
JavaScript 对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person = {
firstname:"John",
lastname:"Doe",
id:5566
};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
空格和折行无关紧要。声明可横跨多行:
var person={
firstname : "John",
lastname : "Doe",
id : 5566
};
对象属性有两种寻址方式:
name=person.lastname;
name=person["lastname"];
下面的代码创建名为 cars 的数组:
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
或者 (condensed array):
var cars=new Array("Saab","Volvo","BMW");
undefined 这个值表示变量不含有值。
可以通过将变量的值设置为 null 来清空变量。
比较运算符在逻辑语句中使用,以测定变量或值是否相等。
假设 x 等于 5:
x == 8:false;
x == 5: true;
x === "5":false;
x === 5:true;
x != 8:true;
x != "5":false;
x !== "5":false;
x !== "5":true;
x > 8:false;
x < 8:true;
x >= 8:false;
x <= 8:true;
x == undefined:false;
x == null:false;
假设 y 等于 undefined:
y == undefined:true
y == null:true
y === null:false
假设 z 等于 null:
z == null:true
z == undefined:true
z === undefined:false
逻辑与:&&
逻辑或:||
逻辑非:!
async 和 await
下面的内容来自 CSDN 用户 loftyamb,原文链接 https://blog.csdn.net/weixin_42042017/article/details/109472908 ,感谢。
希望在一个函数执行完毕之后才去执行另外一个函数,如何解决?用 async 和 await。
await 只能在async函数中执行,否则会报错。
关于await
await
的意思就是等待。它后面可以跟一个表达式。如果是值(如字符串、数字、普通对象等等)的话,返回值就是本身的值。- 通常使用方式为在后面跟一个
promise
对象。await
会等待这个promise
的状态由pending
转为fulfilled
或者rejected
。在此期间它会阻塞,延迟执行await语句后面的语句。 - 如果
promise
对象的结果是resolve
,它会将resolve
的值,作为await
表达式的运算结果。
例子
对于一个操作(创建菜单),需要在获取到 token 之后利用 token 才能执行这个操作,那么对应代码如下:
var token = undefined;
// 获取token
const getToken = async () => {
global.token=await new Promise((resolve) => {
setTimeout(() => {
resolve("loftyamb");
}, 3000); // 模拟通过 post 请求获取 token 返回token的过程
});
console.log(`成功获取到了token${global.token}`);
// 上面的打印语句会被promise对象所阻塞,直到promise对象的状态发送改变
};
// 利用获取到的token,进行创建菜单的操作
const createMenu = async () => {
if (token !== undefined) {
console.log(`利用token${token}成功创建了菜单`);
} else {
console.log("创建失败");
}
};
那么可用以下方式实现二者的依次执行:
const setMenu=async ()=>{
await getToken();
await createMenu();
}
执行:
const setMenu=async ()=>{
await getToken();
await createMenu(); //该方法会等待前面的方法执行完毕之后才执行
}
setMenu();
输出结果:
成功获取到了tokenloftyamb
利用tokenloftyamb成功创建了菜单
关于异常
假定在获取 token 的时候发生了异常,即 Promise 对象状态为 reject,此时要在 async 函数中对异常进行处理,如下所示:
// 获取token
const getToken = async () => {
try {
token = await new Promise((resolve, reject) => {
setTimeout(() => {
reject("error");
}, 3000); // 模拟过了 3 秒才获取 token 失败
});
} catch (err) {
console.log(err);
}
console.log(`成功获取到了token${token}`); // 异常被捕获后则此语句仍能正常执行
};
当异常被处理之后,则await之后的函数仍然会正常执行。
原文链接:https://www.cnblogs.com/hhzm/p/16464610.html
标签:语句,false,discord,await,Bot,js,token,var,true 来源: https://www.cnblogs.com/hhzm/p/16464610.html