其他分享
首页 > 其他分享> > Bot in Discord with discord.js (2)

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 语句标识符 (关键字) :

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

例子

对于一个操作(创建菜单),需要在获取到 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