JavaScript的一些注意事项!
- 1. JavaScript 数据类型
- 2. JavaScript 事件
- 3. JavaScript 字符串
- 4. JavaScript 正则表达式
- 5. JavsScript this 关键字
- 6. JavaScript let 和 const
- 7. JavaScript 异步编程
- 8. JavaScript Promise
- 9. JavaScript 代码规范
- 10. JavaScript 函数定义
- 11. JavaScript prototype
- 12. JavaScript Number对象
- 13. JavaScript String
- 14. JavaScript Date
- 15. JavaScript Array
- 15.1 改变原数组的方法
- 15.1.1 push
- 15.1.2 unshift
- 15.1.3 pop
- 15.1.4 shift
- 15.1.5 sort
- 15.1.6 splice
- 15.1.7 reverse
- 15.2 不改变原数组的方法
- 15.2.1 concat
- 15.2.2 join
- 15.2.3 reduce
- 15.2.4 map
- 15.2.5 forEach
- 15.2.6 filter
- 15.2.7 slice
- 15.2.8 findIndex
- 16. JavaScript Boolean
- 17. JavaScript Math
- 18. JavaScript RegExp
- 19. JavaScript call()和apply()
1. JavaScript 数据类型
笔记
- 值类型(基本类型): 字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol 。
- 引用数据类型(对象类型): 对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date) 。
- 请注意:
- NaN 的数据类型是 number
- 数组(Array)的数据类型是 object
- 日期(Date)的数据类型为 object
- 未定义变量的数据类型为 undefined
- 如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 object。
2. JavaScript 事件
笔记
- 下面是一些常见的HTML事件的列表:
事件 | 描述 |
---|---|
onchange | HTML元素改变 |
onclick | 用户点击HTML元素 |
onmouseover | 鼠标指针移动到指定的元素上时发生 |
onmouseout | 用户从一个HTML元素上移开鼠标时发生 |
onkeydown | 用户按下键盘按键 |
onload | 浏览器已完成页面的加载 |
3. JavaScript 字符串
笔记
- 在 JavaScript 中,字符串写在 单引号 或 双引号 中。
因为这样,以下实例 JavaScript 无法解析:
"We are the so-called "Vikings" from the north."
- 字符串 "We are the so-called " 被截断。
- 可以使用反斜杠 () 来转义 “Vikings” 字符串中的双引号,如下:
"We are the so-called \"Vikings\" from the north."
- 反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符:
- 转义字符 () 可以用于转义撇号,换行,引号,等其他特殊字符。
- 下表中列举了在字符串中可以使用转义字符转义的特殊字符:
代码 | 输出 |
---|---|
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\n | 换行 |
\r | 回车 |
\t | tab(制表符) |
\b | 退格符 |
\f | 换页符 |
- 字符串属性
属性 | 描述 |
---|---|
constructor | 返回创建字符串属性的函数 |
length | 返回字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
- 字符串方法
方法 | 描述 |
---|---|
charAt() | 返回指定索引位置的字符 |
charCodeAt() | 返回指定索引位置字符的Unicode值 |
concat() | 连接两个或多个字符串,返回连接后的字符串 |
fromCharCode() | 将Unicode转换为字符串 |
indexOf() | 返回字符串中检索指定字符第一次出现的位置 |
lastIndexOf() | 返回字符串中检索指定字符最后一次出现的位置 |
localeCompare | 用本地特定的顺序来比较两个字符串 |
match() | 找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式相匹配的值 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLowerCase() | 把字符串转换为小写 |
toString() | 返回字符串对象值 |
toUpperCase() | 把字符串转换为大写 |
trim() | 移除字符串首尾空白 |
valueOf() | 返回某个字符串对象的原始值 |
4. JavaScript 正则表达式
笔记
- 语法:
/正则表达式主体/修饰符
- 实例:
var patt = /runoob/i
- 实例解析:
/runoob/i 是一个正则表达式。
runoob是一个正则表达式主体(用于检索)
i 是一个修饰符(搜索不区分大小写)
- 正则表达式修饰符
修饰符可以在全局搜索中不区分大小写:
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配 |
- 正则表达式模式
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[0-9] | 查找任何从0至9的数字 |
[x|y] | 查找任何以|分隔的选项 |
- 元字符是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
\d | 查找数字 |
\s | 查找空白字符 |
\b | 匹配单词边界 |
\uxxxx | 查找以十六进制数xxxx规定的Unicode字符 |
- 量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个n的字符串 |
n* | 匹配任何包含零个或多个n的字符串 |
n? | 匹配任何包含零个或一个n的字符串 |
5. JavsScript this 关键字
笔记
- 面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
- 在 方法 中,this 表示该方法所属的对象。
- 如果 单独使用 ,this 表示全局对象。
- 在函数中,this 表示全局对象。
- 在函数中,在严格模式下,this 是未定义的(undefined)。
- 在 事件 中,this 表示接收事件的元素。
- 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
6. JavaScript let 和 const
笔记
- var关键字定义的变量可以 先使用后声明 。
- let关键字定义的变量需要 先声明再使用 。
- const关键字定义的常量,声明时 必须进行初始化,且 初始化后不可再修改。
7. JavaScript 异步编程
笔记
异步的概念
- 在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。
- 简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
- 以上是关于异步的概念的解释,接下来我们通俗地解释一下异步:异步就是从主线程发射一个子线程来完成任务。
- 回调函数
- 回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。
- 异步AJAX
- 异步回调广泛应用于 AJAX 编程。有关于 AJAX 详细请参见:AJAX
- XMLHttpRequest 常常用于请求来自远程服务器上的 XML 或 JSON 数据。一个标准的 XMLHttpRequest 对象往往包含多个回调:
var xhr = new XMLHttpRequest();
xhr.onload = function () {
// 输出接收到的文字数据
document.getElementById("demo").innerHTML=xhr.responseText;
}
xhr.onerror = function () {
document.getElementById("demo").innerHTML="请求出错";
}
// 发送异步 GET 请求
xhr.open("GET", "https://www.runoob.com/try/ajax/ajax_info.txt", true);
xhr.send();
- XMLHttpRequest 的 onload 和 onerror 属性都是函数,分别在它请求成功和请求失败时被调用。如果你使用完整的 jQuery 库,也可以更加优雅的使用异步 AJAX:
$.get("https://www.runoob.com/try/ajax/demo_test.php",function(data,status){
alert("数据: " + data + "\n状态: " + status);
});
8. JavaScript Promise
笔记
- Promise 构造函数是 JavaScript 中用于创建 Promise 对象的内置构造函数。
- Promise 构造函数接受一个函数作为参数,该函数是同步的并且会被立即执行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject,分别表示 Promise 成功和失败的状态。
- 起始函数执行成功时,它应该调用 resolve 函数并传递成功的结果。当起始函数执行失败时,它应该调用 reject 函数并传递失败的原因。
- Promise 构造函数返回一个 Promise 对象,该对象具有以下几个方法:
- then:用于处理 Promise 成功状态的回调函数。
- catch:用于处理 Promise 失败状态的回调函数。
- finally:无论 Promise 是成功还是失败,都会执行的回调函数。
- 下面是一个使用 Promise 构造函数创建 Promise 对象的例子,当 Promise 被构造时,起始函数会被同步执行:
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
if (Math.random() < 0.5) {
resolve('success');
} else {
reject('error');
}
}, 1000);
});
promise.then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});
- resolve() 中可以 放置一个参数 用于向下一个 then 传递一个值,then 中的函数也可以返回一个值传递给 then。
- reject() 参数中一般会传递一个异常给之后的 catch 函数用于处理异常。
9. JavaScript 代码规范
笔记
- 变量名
变量名推荐使用驼峰法来命名(camelCase)- 空格与运算符
通常运算符 ( = + - * / ) 前后需要添加空格- 代码缩进
通常使用 4 个空格符号来缩进代码块- 语句规则
简单语句的通用规则:
一条语句通常以分号作为结束符。
复杂语句的通用规则:
将左花括号放在第一行的结尾。
左花括号前添加一空格。
将右花括号独立放在一行。
以分号结束一个复杂的声明。- 对象规则
对象定义的规则:
将左花括号与类名放在同一行。
冒号与属性值间有个空格。
字符串使用双引号,数字不需要。
最后一个属性-值对后面不要添加逗号。
将右花括号独立放在一行,并以分号作为结束符号。
命名规则
- 一般很多代码语言的命名规则都是类似的,例如:
变量和函数为小驼峰法标识, 即除第一个单词之外,其他单词首字母大写( lowerCamelCase)
全局变量为大写 (UPPERCASE )
常量 (如 PI) 为大写 (UPPERCASE )- HTML 和 CSS 的横杠(-)字符:
HTML5 属性可以以 data- (如:data-quantity, data-price) 作为前缀。
CSS 使用 - 来连接属性名 (font-size)。- 通常在 JavaScript 中被认为是减法,所以不允许使用。
- 下划线:
很多程序员比较喜欢使用下划线(如:date_of_birth), 特别是在 SQL 数据库中。
PHP 语言通常都使用下划线。- 帕斯卡拼写法(PascalCase):
帕斯卡拼写法(PascalCase) 在 C 语言中语言较多。- 驼峰法:
JavaScript 中通常推荐使用驼峰法,jQuery 及其他 JavaScript 库都使用驼峰法。
变量名不要以 $ 作为开始标记,会与很多 JavaScript 库冲突。
文件扩展名
HTML 文件后缀可以是 .html (或 .htm)。
CSS 文件后缀是 .css 。
JavaScript 文件后缀是 .js 。
使用小写文件名
大多 Web 服务器 (Apache, Unix) 对大小写敏感: london.jpg 不能通过 London.jpg 访问。
其他 Web 服务器 (Microsoft, IIS) 对大小写不敏感: london.jpg 可以通过 London.jpg 或 london.jpg 访问。
你必须保持统一的风格,我们建议统一使用 小写的文件名。
10. JavaScript 函数定义
笔记
函数提升(Hoisting)
提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的行为。
提升(Hoisting)应用在变量的声明与函数的声明。
因此,函数可以在声明之前调用:
myFunction(5);
function myFunction(y) {
return y * y;
}
自调用函数
函数表达式可以 “自调用”。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:
(function () {
var x = "Hello!!"; // 我将调用自己
})();
箭头函数
ES6 新增了箭头函数。
箭头函数表达式的语法比普通函数表达式更简洁。
(参数1, 参数2, …, 参数N) => { 函数声明 }
(参数1, 参数2, …, 参数N) => 表达式(单一)
// 相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}
没有参数的函数应该写成一对圆括号:
() => {函数声明}
- 有的箭头函数都没有自己的 this。 不适合定义一个 对象的方法。
- 当我们使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的。
- 箭头函数是不能提升的,所以需要在使用之前定义。
11. JavaScript prototype
笔记
在 JavaScript 中,原型(prototype)是一个非常重要的概念,它为对象提供了继承和共享属性的机制。每个 JavaScript 对象都有一个与之关联的原型对象,通过原型对象,可以实现属性和方法的共享,从而减少内存占用。
所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法。
- 原型是一个对象,它是其他对象的模板或蓝图。
- 当一个对象试图访问一个属性或方法时,如果在该对象自身没有找到,JavaScript 会沿着原型链向上查找,直到找到对应的属性或方法,或者达到原型链的顶端 null 为止
对象的__proto__属性
每个 JavaScript 对象(除了 null)都自动拥有一个隐藏的属性 __proto__,它指向该对象的原型对象。
原型链
在 JavaScript 中,对象通过原型链(prototype chain)来实现继承。当一个对象尝试访问一个属性或方法时,JavaScript 会首先检查该对象自身是否有这个属性或方法。如果没有,它会沿着原型链向上查找。
let obj = {};
console.log(obj.toString()); // 输出: [object Object]
// 这个 `toString` 方法实际上是从 `Object.prototype` 继承过来的
在上面的例子中,obj 对象没有定义 toString 方法,因此 JavaScript 沿着原型链查找,最终在 Object.prototype 中找到该方法。
prototype继承
- 所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法:
Date 对象从 Date.prototype 继承。
Array 对象从 Array.prototype 继承。
Person 对象从 Person.prototype 继承。- 所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。
- JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
- Date 对象, Array 对象, 以及 Person 对象从 Object.prototype 继承。
添加属性和方法
有的时候我们想要在所有已经存在的对象添加新的属性或方法。
另外,有时候我们想要在对象的构造函数中添加属性或方法。
使用 prototype 属性就可以给对象的构造函数添加新的属性:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
当然我们也可以使用 prototype 属性就可以给对象的构造函数添加新的方法:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
12. JavaScript Number对象
笔记
无穷大(Infinity)
当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,在JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大(当然还保留它们的正负号)。
NaN - 非数字值
- NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
- 你可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值。
Number 属性
属性 | 描述 |
---|---|
Number.MAX_VALUE | 最大值 |
Number.MIN_VALUE | 最小值 |
Number.NAN | 非数字 |
Number.NEGATIVE_INFINITY | 负无穷,在溢出时返回 |
Number.POSITIVE_INFINITY | 正无穷,在溢出时返回 |
Number.EPSILON | 表示1和比最接近1且大于1的最小Number之间的差别 |
Number.MIN_SAFE_INTEGER | 最小安全整数 |
Number.MAX_SAFE_INTEGER | 最大安全整数 |
数字方法
方法 | 描述 |
---|---|
Number.parseFloat() | 将字符串转换成浮点数,和全局方法parseFloat()作用一致 |
Number.parseInt() | 将字符串转换成整型数字,和全局方法parseInt()作用一致 |
Number.isFinite() | 判断传递的参数是否为有限数字 |
Number.isInteger() | 判断传递的参数是否为整数 |
Number.isNaN() | 判断传递的参数是否为isNaN() |
Number.isSafeInteger() | 判断传递的参数是否为安全整数 |
数字类型原型上的一些方法
方法 | 描述 |
---|---|
toExponential() | 返回一个数字的指数形式的字符串,如:1.23e+2 |
toFixed() | 返回指定小数位数的表示形式 |
toPrecision() | 返回一个指定精度的数字 |
13. JavaScript String
笔记
字符串属性和方法
属性:
- length
- prototype
- constructor
方法:
- charAt()
- charCodeAt()
- concat()
- fromCharCode()
- indexOf()
- lastIndexOf()
- match()
- replace()
- search()
- slice()
- split()
- substr()
- substring()
- toLowerCase()
- toUpperCase()
- valueOf()
14. JavaScript Date
笔记
日期对象用于处理日期和时间。
Date对象
- Date 对象用于处理日期与时间。
- 创建 Date 对象: new Date()
- 以下四种方法同样可以创建 Date 对象:
var d = new Date();
var d = new Date(milliseconds); // 参数为毫秒
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
- milliseconds 参数是一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,表示自 1970 年 1 月 1 日 00:00:00 UTC(the Unix epoch)以来的毫秒数。
- dateString 参数表示日期的字符串值。
- year, month, day, hours, minutes, seconds, milliseconds 分别表示年、月、日、时、分、秒、毫秒。
- Date对象属性
属性 | 描述 |
---|---|
constructor | 返回对创建此对象的Date函数的引用 |
prototype | 使您有能力向对象添加属性和方法 |
- Date对象方法
方法 | 描述 |
---|---|
getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31) |
getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6) |
getFullYear() | 从 Date 对象以四位数字返回年份 |
getHours() | 返回 Date 对象的小时 (0 ~ 23) |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999) |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59) |
getMonth() | 从 Date 对象返回月份 (0 ~ 11) |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59) |
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数 |
getTimezoneOffset() | 返回本地时间与格林威治标准时间 (GMT) 的分钟差 |
getUTCDate() | 根据世界时从 Date 对象返回月中的一天 (1 ~ 31) |
getUTCDay() | 根据世界时从 Date 对象返回周中的一天 (0 ~ 6) |
getUTCFullYear() | 根据世界时从 Date 对象返回四位数的年份 |
getUTCHours() | 根据世界时返回 Date 对象的小时 (0 ~ 23) |
getUTCMilliseconds() | 根据世界时返回 Date 对象的毫秒(0 ~ 999) |
getUTCMinutes() | 根据世界时返回 Date 对象的分钟 (0 ~ 59) |
getUTCMonth() | 根据世界时从 Date 对象返回月份 (0 ~ 11) |
getUTCSeconds() | 根据世界时返回 Date 对象的秒钟 (0 ~ 59) |
getYear() | 已废弃。 请使用 getFullYear() 方法代替 |
parse() | 返回1970年1月1日午夜到指定日期(字符串)的毫秒数 |
setDate() | 设置 Date 对象中月的某一天 (1 ~ 31) |
setFullYear() | 设置 Date 对象中的年份(四位数字) |
setHours() | 设置 Date 对象中的小时 (0 ~ 23) |
setMiliseconds() | 设置 Date 对象中的毫秒 (0 ~ 999) |
setMinutes() | 设置 Date 对象中的分钟 (0 ~ 59) |
setMonth() | 设置 Date 对象中月份 (0 ~ 11) |
setSeconds() | 设置 Date 对象中的秒钟 (0 ~ 59) |
setTime() | setTime() 方法以毫秒设置 Date 对象 |
setUTCDate() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31) |
setUTCFullYear() | 根据世界时设置 Date 对象中的年份(四位数字) |
setUTCHours() | 根据世界时设置 Date 对象中的小时 (0 ~ 23) |
setUTCMilliseconds() | 根据世界时设置 Date 对象中的毫秒 (0 ~ 999) |
setUTCMinutes() | 根据世界时设置 Date 对象中的分钟 (0 ~ 59) |
setUTCMonth() | 根据世界时设置 Date 对象中的月份 (0 ~ 11) |
setUTCSeconds() | setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段 |
setYear() | 已废弃。请使用 setFullYear() 方法代替 |
toDateString() | 把 Date 对象的日期部分转换为字符串 |
toGMTString() | 已废弃。请使用 toUTCString() 方法代替 |
toISOString() | 使用 ISO 标准返回字符串的日期格式 |
toJSON() | 以 JSON 数据格式返回日期字符串 |
toLocaleDateString() | 根据本地时间格式,把 Date 对象的日期部分转换为字符串 |
toLocaleTimeString() | 根据本地时间格式,把 Date 对象的时间部分转换为字符串 |
toLocaleString() | 根据本地时间格式,把 Date 对象转换为字符串 |
toString() | 把 Date 对象转换为字符串 |
toTimeString() | 把 Date 对象的时间部分转换为字符串 |
toUTCString() | 根据世界时,把 Date 对象转换为字符串 |
UTC() | 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数 |
valueOf() | 返回 Date 对象的原始值 |
15. JavaScript Array
15.1 改变原数组的方法
15.1.1 push
笔记
- 作用:push 方法往数组里面添加元素,返回数组的长度。
15.1.2 unshift
笔记
- 作用:unshift 方法会在数组的开头添加一个元素,它会返回数组新的长度。
15.1.3 pop
笔记
- 作用:pop() 方法从数组中删除最后一个元素,并返回该元素的值。
15.1.4 shift
笔记
- 作用:shift() 方法从数组中删除第一个元素,并返回该元素的值。
15.1.5 sort
笔记
- 作用:sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的。它返回的就是排序后的数组。
15.1.6 splice
笔记
- 作用:splice() 方法用于添加或删除数组中的元素,如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。
15.1.7 reverse
笔记
- 作用:reverse() 方法用于颠倒数组中元素的顺序。
15.2 不改变原数组的方法
15.2.1 concat
笔记
- 作用:concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
15.2.2 join
笔记
- 作用:join() 方法用于把数组中的所有元素转换一个字符串,元素是通过指定的分隔符进行分隔的
15.2.3 reduce
笔记
- 作用:reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
15.2.4 map
笔记
- 作用:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
15.2.5 forEach
笔记
- 作用:forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
15.2.6 filter
笔记
- 作用:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
15.2.7 slice
笔记
- 作用:slice() 方法可从已有的数组中返回选定的元素。slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
15.2.8 findIndex
笔记
- 作用:findIndex 接收一个测试函数,也可以叫做条件函数,最终返回满足该测试函数的元素的索引位置,如果没有找到符合条件的元素,则返回-1。如果满足条件的有多个,那么只会返回第一个满足条件的元素索引。
16. JavaScript Boolean
笔记
Boolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 (true 或者false).
Boolean对象属性
属性 | 描述 |
---|---|
constructor | 返回对创建此对象的Boolean函数的引用 |
prototype | 使您有能力向对象添加属性和方法 |
Boolean对象方法
方法 | 描述 |
---|---|
toString() | 把布尔值转换为字符串,并返回结果 |
valueOf() | 返回Boolean对象的原始值 |
17. JavaScript Math
笔记
- Math 对象用于执行数学任务。
- Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。
- Math对象属性
属性 | 描述 |
---|---|
E | 返回算术常量 e,即自然对数的底数(约等于2.718) |
LN2 | 返回 2 的自然对数(约等于0.693) |
LN10 | 返回 10 的自然对数(约等于2.302) |
LOG2E | 返回以 2 为底的 e 的对数(约等于 1.4426950408889634) |
LOG10E | 返回以 10 为底的 e 的对数(约等于0.434) |
PI | 返回圆周率(约等于3.14159) |
SQRT1_2 | 返回 2 的平方根的倒数(约等于 0.707) |
SQRT2 | 返回 2 的平方根(约等于 1.414) |
- Math对象方法
方法 | 描述 |
---|---|
abs(x) | 返回 x 的绝对值 |
acos(x) | 返回 x 的反余弦值 |
asin(x) | 返回 x 的反正弦值 |
atan(x) | 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值 |
atan2(y,x) | 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间) |
ceil(x) | 对数进行上舍入 |
cos(x) | 返回数的余弦 |
exp(x) | 返回 Ex 的指数 |
floor(x) | 对 x 进行下舍入 |
log(x) | 返回数的自然对数(底为e) |
max(x,y,z,…,n) | 返回 x,y,z,…,n 中的最高值 |
min(x,y,z,…,n) | 返回 x,y,z,…,n中的最低值 |
pow(x,y) | 返回 x 的 y 次幂 |
random() | 返回 0 ~ 1 之间的随机数 |
round(x) | 四舍五入 |
sin(x) | 返回数的正弦 |
sqrt(x) | 返回数的平方根 |
tan(x) | 返回角的正切 |
tanh(x) | 返回一个数的双曲正切函数值 |
trunc(x) | 将数字的小数部分去掉,只保留整数部分 |
18. JavaScript RegExp
笔记
- 正则表达式是描述字符模式的对象。
- 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。
**语法 **
var patt=new RegExp(pattern,modifiers);
或者更简单的方式:
var patt=/pattern/modifiers;
- pattern(模式) 描述了表达式的模式
- modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
- 注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
修饰符
修饰符用于执行区分大小写和全局匹配:
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配 |
方括号
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找任何从 0 至 9 的数字 |
[a-z] | 查找任何从小写 a 到小写 z 的字符 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符 |
[A-z] | 查找任何从大写 A 到小写 z 的字符 |
[adgk] | 查找给定集合内的任何字符 |
[^adgk] | 查找给定集合外的任何字符 |
(red|blue|green) | 查找任何指定的选项 |
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找数字、字母及下划线 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 查找 NULL 字符 |
\n | 查找换行符 |
\f | 查找换页符 |
\r | 查找回车符 |
\t | 查找制表符 |
\v | 查找垂直制表符 |
\xxx | 查找以八进制数 xxx 规定的字符 |
\xdd | 查找以十六进制数 dd 规定的字符 |
\uxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符 |
量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中所有的 “a”。 |
n* | 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“A bird warbled” 中的 “b”,但是不匹配 “A goat grunted”。 |
n? | 匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 “angel” 中的 “el”,“angle” 中的 “le”。 |
n{X} | 匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。 |
n{X,} | X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。 |
n{X,Y} | X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。 |
n$ | 匹配任何结尾为 n 的字符串 |
^n | 匹配任何开头为 n 的字符串 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串 |
RegExp对象属性
属性 | 描述 |
---|---|
constructor | 返回一个函数,该函数是一个创建 RegExp 对象的原型 |
global | 判断是否设置了 “g” 修饰符 |
ignoreCase | 判断是否设置了 “i” 修饰符 |
lastIndex | 用于规定下次匹配的起始位置 |
multiline | 判断是否设置了 “m” 修饰符 |
source | 返回正则表达式的匹配模式 |
RegExp对象方法
方法 | 描述 |
---|---|
compile | 在 1.5 版本中已废弃。 编译正则表达式 |
exec | 检索字符串中指定的值。返回找到的值,并确定其位置 |
test | 检索字符串中指定的值。返回 true 或 false |
toString | 返回正则表达式的字符串 |
19. JavaScript call()和apply()
笔记
- 这两个方法都是 函数对象的方法 ,需要通过 函数对象 来调用。
- 当对函数调用call()和apply()都会 调用函数执行
- 在调用call()和apply()可以将一个对象指定为 第一个参数 ,此时这个对象将会成为函数执行时的this
- call()方法可以将实参在对象之后依次传递
- apply()方法需要将实参封装到一个数组中统一传递
fun.call(obj,2,3)
fun.applu(obj,[2,3])
- this的情况:
- 以 函数 形式调用时,this永远都是 window
- 以 方法 的形式调用时,this是 调用方法的对象
- 以 构造函数的形式 调用时,this是 新创建的那个对象
- 使用 call和apply 调用时,this是 指定的那个对象