目录
1.5、JavaScript 错误 - throw、try 和 catch
学习路径:菜鸟教程,主要就是熟悉一下JavaScript的语法规则,然后我学习的是微信小程序,所以JavaScript很多内容都不需要,例如在html中的使用
1、JavaScript简介
- JavaScript 拥有动态类型,使用关键字 var 来定义变量,返回时确定数据类型
- JavaScript使用分号分割语句(非必要),使用分号是可以在一行执行多条语句
- JavaScript中的let命令所在的代码块内有效
- JavaScript中的const不需要声明变量类型,c语言用法const int a,现在 const a即可
1.1、JavaScript数据类型
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol(表示独一无二的值)。
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
注意:对象由花括号分隔。在括号内部,对象属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔,访问时的两种方法:
object.name;
object["name"];
1.2、JavaScript函数
函数声明,关键词 function 必须是小写的(小程序好像可以不需要function)
function myFunction(var1,var2)
{
//执行代码
}
1.3、JavaScript字符串
方法 | 描述 |
---|---|
charAt() | 返回指定索引位置的字符,或者直接使用[index]获取 |
charCodeAt() | 返回指定索引位置字符的 Unicode 值 |
concat() | 连接两个或多个字符串,返回连接后的字符串,多个的时候使用,单个也可以使用push |
fromCharCode() | 将 Unicode 转换为字符串 |
indexOf() | 返回字符串中检索指定字符第一次出现的位置 |
lastIndexOf() | 返回字符串中检索指定字符最后一次出现的位置 |
localeCompare() | 用本地特定的顺序来比较两个字符串 |
match() | 找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式相匹配的值 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLowerCase() | 把字符串转换为小写 |
toString() | 返回字符串对象值 |
toUpperCase() | 把字符串转换为大写 |
trim() | 移除字符串首尾空白 |
valueOf() | 返回某个字符串对象的原始值 |
constructor | 对创建该对象的函数的引用 |
length | 字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
1.4、JavaScript 类型转换
- typeof 操作符来查看 JavaScript 变量的数据类型
- String()和toString()可以将数字/和布尔值转换为字符串:String(123)/String(false)
- toExponential()把对象的值转换为指数计数法。
- toFixed()把数字转换为字符串,结果的小数点后有指定位数的数字。
- toPrecision()把数字格式化为指定的长度。
- Number() 可以将字符串/布尔值转换为数字:Number("123"),Number(false)
- Number() 和getTime() 可将日期转换为数字,返回秒数:Number(new Date())
注意事项:例如var x = 10 + "5";竟然可以正常运行返回"105",这样在自己调用的时候需要注意其类型,避免出现自己混淆出现程序跑飞的情况
1.5、JavaScript 错误 - throw、try 和 catch
- try 语句允许我们定义在执行时进行错误测试的代码块, try 和 catch 是成对出现的。
- catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
- throw 语句创建自定义错误。
- finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。
1.6、JavaScript 调试
- console.log() 方法在调试窗口上打印 JavaScript 值
1.7、JavaScript 异步编程
异步的概念:程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。
回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。例如:
//这段程序中的 setTimeout 就是一个消耗时间较长(3 秒)的过程,
它的第一个参数是个回调函数,第二个参数是毫秒数,
这个函数执行之后会产生一个子线程,子线程会等待 3 秒
setTimeout(function () {
document.getElementById("demo").innerHTML="RUNOOB!";
}, 3000);
1.7.1、Promise
new Promise(function (resolve, reject) {
// 要做的事情...
});
Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject,但是请注意以下两点:
- resolve 和 reject 的作用域只有起始函数,不包括 then 以及其他序列;
- resolve 和 reject 并不能够使起始函数停止运行,别忘了 return。
1.7.2、异步函数
异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行。
异步函数实际上原理与 Promise 原生 API 的机制是一模一样的,只不过更便于程序员阅读。
处理异常的机制将用 try-catch 块实现:
async function asyncFunc() {
try {
await new Promise(function (resolve, reject) {
throw "Some error"; // 或者 reject("Some error")
});
} catch (err) {
console.log(err);
// 会输出 Some error
}
}
asyncFunc();
1.8、函数定义
箭头函数
//定义
(参数1, 参数2, …, 参数N) => { 函数声明 }
(参数1, 参数2, …, 参数N) => 表达式(单一)
// 相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
//实例
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
1.9、函数参数
- JavaScript 函数定义显式参数时没有指定数据类型。
- JavaScript 函数对隐式参数没有进行类型检测。
- JavaScript 函数对隐式参数的个数没有进行检测。
例如函数参数检测:
// 如果 y 已经定义,y || 0 返回 y,因为 y 是 true,
否则返回 0,因为 undefined 为 false。
function myFunction(x, y) {
y = y || 0;
}