第一章 JavaScript简介
JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。
1.1 JavaScript的历史
JavaScript的历史可以追溯到1995年。当时,网景公司(Netscape)正在开发一种名为Netscape Navigator的Web浏览器。为了使浏览器具备更丰富的交互功能,网景公司雇佣了一位名叫Brendan Eich的工程师,让他设计一种脚本语言。这个脚本语言最初被称为LiveScript。
1995年12月,Netscape公司与Sun Microsystems达成合作协议,将LiveScript更名为JavaScript,以借用Sun Microsystems的Java品牌的声望。然而,JavaScript与Java并没有太多的相似之处,它是一种完全不同的语言。
1996年,微软推出了自己的浏览器Internet Explorer,并在其浏览器中支持了一种名为JScript的脚本语言。JScript与JavaScript在语法和功能方面非常相似,但也存在一些细微的差异。
为了解决不同浏览器之间的兼容性问题,ECMAScript规范应运而生。ECMAScript是JavaScript的标准化规范,定义了JavaScript的语法、类型、操作符等方面的规则,以确保不同浏览器对JavaScript的解释和执行结果保持一致。
自那时以来,JavaScript一直在不断发展和演变。它已经成为Web开发中最重要和最广泛使用的编程语言之一,不仅可以用于前端开发,还可以用于后端开发(如Node.js)和移动应用开发(如React Native)。JavaScript的生态系统也非常丰富,有许多流行的框架和库,如React、Vue、Angular等,可以帮助开发人员更高效地构建复杂的Web应用程序。
1.2 JavaScript的特点
JavaScript具有以下几个特点:
脚本语言
JavaScript是一种解释性的脚本语言,不需要编译过程,可以直接在浏览器中执行。这使得开发和调试过程更加灵活和快速。
弱类型语言
JavaScript是一种弱类型语言,变量的类型在运行时可以动态改变。这意味着开发人员不需要显式地声明变量的类型,可以更加灵活地处理数据。
面向对象
JavaScript支持面向对象编程(OOP),可以使用对象、类、继承等概念来组织和管理代码。开发人员可以通过创建对象和定义方法来实现封装、继承和多态等面向对象的特性。
事件驱动
JavaScript是一种事件驱动的语言,可以通过监听和响应事件来实现交互和动态效果。例如,可以通过监听按钮的点击事件来执行相应的操作。
客户端脚本语言
JavaScript最初是为浏览器而设计的,用于在客户端执行脚本。它可以与HTML和CSS结合使用,实现动态的网页交互和效果。
广泛应用
JavaScript不仅可以在浏览器中执行,还可以在服务器端(如Node.js)和移动应用开发中使用。它已经成为全栈开发的重要组成部分,可以用于构建各种类型的应用程序。
动态性
JavaScript具有很高的动态性,可以在运行时修改和扩展代码。这使得开发人员可以根据需要动态地创建、修改和执行代码,实现更灵活和动态的应用程序。
总的来说,JavaScript是一种灵活、强大且广泛应用的脚本语言,适用于各种类型的应用程序开发,具有丰富的特性和功能。
第二章 JavaScript的使用
2.1 JavaScript的标签引用
在HTML中可以通过引用<script>标签来直接编写js代码
<script>
alert("hello,js");
</script>
2.2 文件的引用
可以直接创建一个js文件,并编好代码,在HTML中引用js文件来使用
index.html:
<script src="js/01.js"></script>
01.js:
alert("hello,js");
2.3 JavaScript输入/输出
弹窗输入(a为输入的信息):
var a = prompt("输入弹窗的提示信息")
弹窗输入默认输入类型为string类型,如要将输入的内容转为number类型,可以通过下面这一行代码来实现(其中Int代表整数类型,Float代表浮点数类型):
a = parseInt(a)
//或者
a = parseFloat(a)
页面输出:
document.write("要输出的内容")
弹窗输出:
alert("要弹出的内容") //弹窗输出信息
控制台输出:
console.log("要输出的内容") //将结果输出在控制台上
2.4 JavaScript注释
注释不会被解析器解析执行,但可以在源码中看到,方便开发过程中标明该段代码的具体作用
单行注释:
//注释的内容
多行注释:
/*
注释的内容
*/
第三章 JavaScript语法
3.1 标识符
所谓标识符,就是指给变量、函数、属性或函数的参数起名字。
标识符的定义有以下几个规则:
- 变量名不能以数字开头
- 变量名不能有空格出现
- 不能是关键字
- 可以是26个英文字母(不区分大小)或者包含数字
- 可以有_或$符号,他们可以开头
JavaScript中的关键字包括:
- var:声明一个变量。
- let:声明一个块级作用域的变量。
- const:声明一个常量。
- if:用于条件语句,如果满足条件则执行特定的代码块。
- else:在if语句条件不满足时执行的代码块。
- switch:用于多个条件的选择语句。
- case:在switch语句中定义一个条件。
- break:用于跳出循环或switch语句。
- for:用于循环执行特定的代码块。
- while:在指定条件为真时循环执行特定的代码块。
- do-while:在循环体的末尾检查条件是否为真,如果为真则继续执行循环。
- function:声明一个函数。
- return:从函数中返回一个值。
- this:引用当前对象。
- new:创建一个对象实例。
- class:声明一个类。
- extends:用于创建一个类的子类。
- import:引入外部模块。
- export:将模块中的内容导出。
- try:定义一个包含可能出现错误的代码块,并且可以捕获和处理异常。
- catch:在try语句块中捕获异常。
- finally:在try语句块执行结束后无论是否发生异常都会执行的代码块。
- throw:抛出一个异常。
- instanceof:检查一个对象是否是某个类的实例。
- delete:删除对象的属性或数组中的元素。
3.2变量
3.2.1 JavaScript定义变量的注意事项
- 变量名必须以字母、下划线(_)或美元符号($)开头,后面可以跟字母、数字、下划线或美元符号。
- 变量名区分大小写,例如"myVariable"和"myvariable"是两个不同的变量。
- 变量名不能使用JavaScript的保留字作为变量名,例如"var"、"function"等。
- 变量名应该具有描述性,能够清晰地表达变量的用途。
- 变量名应该使用驼峰命名法,即第一个单词小写,后面的单词首字母大写,例如"myVariableName"。
- 变量名应该尽量避免使用缩写或简写,以提高代码的可读性。
- 变量名应该尽量避免使用全局变量,可以使用局部变量或者将变量封装在函数中。
- 变量名应该尽量避免使用特殊字符,以免引起命名冲突或者语法错误。
- 变量名应该尽量避免使用中文或其他非ASCII字符,以免引起编码问题。
- 变量名应该遵循一定的命名规范,例如使用前缀或后缀表示变量的类型或作用域。
- 总之,定义变量时应该注意命名规范、可读性和避免冲突,以提高代码的质量和可维护性。
3.2.2 变量的数据类型
JavaScript中有以下三种大的数据类型
基本数据类型(Primitive Data Types):
- 字符串(String):表示文本数据。
- 数字(Number):表示数值。
- 布尔值(Boolean):表示真或假。
- undefined:表示未定义的值。
- null:表示空值。
- Symbol:表示唯一的、不可变的值。
引用数据类型(Reference Data Types):
- 对象(Object):表示复杂的数据结构,可以包含多个键值对。
- 数组(Array):表示有序的集合。
- 函数(Function):表示可执行的代码块。
特殊数据类型:
- NaN:表示一个非数字值。
- Infinity:表示一个无穷大的数。
如果想查看某一变量的类型可以通过typeof操作符来实现,代码格式如下:
var 变量名 = 10;
document.write("变量名的数据类型是"+typeof(变量名));
示例代码:
var a = 20 ;
var b = 3.14;
var c = true;
var d = false;
var e = "helloworld";//双引号括起来的内容:字符串
var f = 'a';//单引号括起来的单个内容:字符
var g = new Object() ;//创建对象
var k ;//未定义类型;没有意义
document.write("a的值是:" +a+ ",a的数据类型是"+typeof(a)+"<br/>");
document.write("b的值是:" +b+ ",b的数据类型是"+typeof(b)+"<br/>");
document.write("c的值是:" +c+ ",b的数据类型是"+typeof(c)+"<br/>");
document.write("d的值是:" +d+ ",b的数据类型是"+typeof(d)+"<br/>");
document.write("e的值是:" +e+ ",e的数据类型是"+typeof(e)+"<br/>");
document.write("f的值是:" +f+ ",f的数据类型是"+typeof(f)+"<br/>");
document.write("g的值是:" +g+ ",g的数据类型是"+typeof(g)+"<br/>");
document.write("k的值是:" +k+ ",k的数据类型是"+typeof(k)+"<br/>");
运行结果:
3.3 运算符
3.3.1 算术运算符
算术运算符用于表达式计算。
运算符 | 描述 | 例子 | 结果 |
+ | 加法 | x=y+1 | x=4 |
- | 简法 | x=y-1 | x=2 |
* | 乘法 | x=y*2 | x=6 |
/ | 除法 | x=y/2 | x=1.5 |
% | 模(求余数() | x=y%2 | x=1 |
++ | 自增 | ++y | y=4 |
y++ | |||
-- | 自减 | --y | y=2 |
++y |
3.3.2 赋值运算符
赋值运算符用于给 JavaScript 变量赋值。
运算符 | 例子 | 等同于 | 结果 |
= | x=y | x=4 | |
+= | x+=y | x=x+y | x=6 |
-= | x-=y | x=x-y | x=2 |
*= | x*=y | x=x*y | x=8 |
/= | x/=y | x=x/y | x=2 |
%= | x%=y | x=x%y | x=0 |
3.3.3 关系运算符
关系运算符在逻辑语句中使用,以测定变量或值是否相等。
运算符 | 说明 | 例子 | 返回值 |
> | 大于 | x>y | false |
< | 小于 | x<y | true |
>= | 大于等于 | x>=y | false |
<= | 小于等于 | x<=y | true |
3.3.4 位运算符
运算符 | 说明 | 例子 | 结果 |
& | 按位与 | x&y | 2(0000 0000 0000 0010) |
| | 按位或 | x|y | 3(0000 0000 0000 0011) |
~ | 按位取反 | ~x | -3(0000 0000 0000 0011) |
^ | 按位异或 | x^y | 1(0000 0000 0000 0001) |
按位取反详解:
- JavaScript 中的数字是以补码形式进行表示
- 在计算机中,负数常常使用补码表示。补码是一种表示有符号整数的方法,它可以使加法和减法的运算规则统一,同时避免了使用额外的符号位。
- 在补码表示法中,正数的补码与其本身相同,而负数的补码是其二进制表示的每一位取反后加1。因此,对于一个整数,如果对其进行按位取反操作,实际上是将其补码的每一位取反。
- 在 JavaScript 中,数字被存储为32位有符号整数。当数字被转换为补码形式时,按位取反操作实际上是将其二进制表示的每一位取反。因此,按位取反的结果是补码形式的负数。
- 需要注意的是,JavaScript 中的位运算符(包括按位取反运算符~)只适用于32位有符号整数。对于64位整数或浮点数,位运算符的行为可能会有所不同。
注意:
按位取反操作可能会导致溢出问题。在某些编程语言中,按位取反操作的结果可能与预期不符,特别是对于无符号整数类型。因此,在使用按位取反操作时,需要注意数据类型和溢出问题。
异或运算(XOR)是一种逻辑运算符,用于对两个操作数进行比较。它的运算规则如下:
- 如果两个操作数的对应位相同(都为0或都为1),则结果为0。
- 如果两个操作数的对应位不同(一个为0,一个为1),则结果为1。
异或运算有一些特性:
- 交换律:A ^ B = B ^ A
- 结合律:(A ^ B) ^ C = A ^ (B ^ C)
- 自反性:A ^ A = 0
- 零元素:A ^ 0 = A
异或运算在编程中有很多应用,例如:
- 交换两个变量的值:可以使用异或运算来交换两个变量的值,而无需使用额外的临时变量。
- 检测出现奇数次的元素:如果一个数组中只有一个元素出现了奇数次,而其他元素都出现了偶数次,可以使用异或运算来找出这个元素。
- 加密和解密:异或运算可以用于简单的加密和解密算法。
异或运算在逻辑运算和位运算中都有广泛的应用,可以用于实现各种功能和算法。
3.3.5 逻辑运算符
逻辑运算符用于测定变量或值之间的逻辑。
运算符 | 描述 | 例子 |
&& | 与 | (x<5 && y>1)为true |
|| | 或 | (x<5 || y>1)为true |
! | 非 | (x!=y)为true |
^ | 异或 | (x^y)为true |
逻辑与(AND)运算符:用符号&&表示。它的运算规则如下:
例如,表达式true && false的结果为false。
- 如果两个操作数都为true,结果为true。
- 如果有一个操作数为false,结果为false。
逻辑或(OR)运算符:用符号||表示。它的运算规则如下:
例如,表达式true || false的结果为true。
- 如果两个操作数都为false,结果为false。
- 如果有一个操作数为true,结果为true。
逻辑非(NOT)运算符:用符号!表示。它的运算规则如下:
例如,表达式!true的结果为false。
- 如果操作数为true,结果为false。
- 如果操作数为false,结果为true。
逻辑异或(XOR)运算符:用符号^表示,用于对两个逻辑值进行操作。它的运算规则如下:
- 如果两个操作数的值相同(都为true或都为false),结果为false。
- 如果两个操作数的值不同(一个为true,另一个为false),结果为true。
逻辑运算符可以用于组合多个逻辑表达式,构建更复杂的逻辑条件。它们在条件语句、循环控制、逻辑判断等方面都有广泛的应用。
此外,逻辑运算符还有一些重要的特性:
- 短路求值:逻辑与(AND)和逻辑或(OR)运算符都具有短路求值的特性。当使用逻辑与运算符时,如果第一个操作数为false,那么第二个操作数将不会被计算。当使用逻辑或运算符时,如果第一个操作数为true,那么第二个操作数将不会被计算。这个特性可以提高代码的效率,避免不必要的计算。
- 运算符优先级:逻辑非(NOT)运算符的优先级最高,其次是逻辑与(AND)运算符,最后是逻辑或(OR)运算符。在复杂的逻辑表达式中,可以使用括号来明确运算的顺序。
3.3.6 比较运算符
相等运算符(==):用于检查两个值是否相等。如果相等,则返回true;否则返回false。 例如:
a = 5 b = 5 print(a == b) # 输出 True
不相等运算符(!=):用于检查两个值是否不相等。如果不相等,则返回true;否则返回false。 例如:
a = 5 b = 10 print(a != b) # 输出 True
大于运算符(>):用于检查一个值是否大于另一个值。如果大于,则返回true;否则返回false。 例如:
a = 5 b = 10 print(b > a) # 输出 True
小于运算符(<):用于检查一个值是否小于另一个值。如果小于,则返回true;否则返回false。 例如:
a = 5 b = 10 print(a < b) # 输出 True
大于等于运算符(>=):用于检查一个值是否大于或等于另一个值。如果大于或等于,则返回true;否则返回false。 例如:
a = 5 b = 5 print(a >= b) # 输出 True
小于等于运算符(<=):用于检查一个值是否小于或等于另一个值。如果小于或等于,则返回true;否则返回false。 例如:
a = 5 b = 10 print(b <= a) # 输出 False
比较运算符通常用于条件语句的判断和逻辑运算中。
3.4 条件语句
3.4.1 if...else
在JavaScript中,if语句也是一种条件语句,用于根据条件的真假来执行不同的代码块。JavaScript中if语句的基本语法如下:
if (condition) {
// 如果条件为真,则执行这里的代码块
} else {
// 如果条件为假,则执行这里的代码块
}
其中,condition
是一个表达式,用于表示判断条件。如果 condition
的值为真,则执行 if
代码块中的代码;否则,执行 else
代码块中的代码。
下面是一个简单的例题,可以供大家学习使用if语句:
键盘录入通过prompt()录入一个月份的值(number类型),判断它所属的季节
3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12,1,2 冬季
示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
var month = window.prompt("请输入一个月份的值")
month = parseInt(month)
if (month>=3 && month<=5) {
alert("该月份属于春季")
} else if (month>=6 && month<=8) {
alert("该月份属于夏季")
} else if (month>=9 && month<=11) {
alert("该月份属于秋季")
} else if (month==12 || month==1 || month==2) {
alert("该月份属于冬季")
} else {
alert("输入的月份无效")
}
</script>
</head>
<body>
</body>
</html>
3.4.2 switch..case
在JavaScript中,switch语句是一种多路分支语句,用于根据不同的条件执行不同的代码块。它可以替代多个if语句,使代码更加简洁和可读。switch语句的基本语法如下:
switch (expression) {
case value1:
// 如果expression等于value1,则执行这里的代码块
break;
case value2:
// 如果expression等于value2,则执行这里的代码块
break;
// 可以继续添加更多的case语句
default:
// 如果expression不等于任何一个case的值,则执行这里的代码块
break;
}
下面是一个简单的例题,可以供大家学习使用switch语句:
键盘录入星期的值,判断星期
示例代码:
!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
var week_day = window.prompt("请您输入一个星期的值:") ;
week_day = parseInt(week_day) ;
var number = 3 ;
switch(week_day){
case 1:
document.write("星期一") ;
break ;
case 2:
document.write("星期二") ;
break ;
case number:
document.write("星期三<br/>") ;
break ;
case 4:
document.write("星期四<br/>") ;
break ;
case 5:
document.write("星期五<br/>") ;
break ;
case 6:
document.write("星期六<br/>") ;
break ;
case 7:
document.write("星期日") ;
break ;
default:
document.write("对不起,地球没有这个星期!<br/>") ;
break ;
}
</script>
</head>
<body>
</body>
</html>
在实际应用中,switch语句可以根据不同的条件执行不同的代码块,使代码更加简洁和可读。同时,switch语句还可以与break语句结合使用,以控制代码的执行流程。
3.5 循环语句
3.5.1 for循环
for循环是一种常用的循环语句,它允许你指定循环的起始条件、终止条件和每次循环后的操作。for循环的基本语法如下:
for (初始化表达式; 条件表达式; 更新表达式) {
// 在条件为真时执行的代码块
}
初始化表达式用于初始化循环变量,条件表达式用于判断循环是否继续执行,更新表达式用于更新循环变量的值。循环会在每次迭代时执行一次代码块,直到条件表达式的值为假为止。
3.5.2 while循环
while循环是一种先判断条件再执行代码块的循环语句。while循环的基本语法如下:
while (条件表达式) {
// 在条件为真时执行的代码块
}
条件表达式用于判断循环是否继续执行,循环会在每次迭代时先判断条件表达式的值,如果为真则执行代码块,否则结束循环。
3.5.3 do-while循环
do-while循环是一种先执行代码块再判断条件的循环语句。do-while循环的基本语法如下:
do {
// 在条件为真时执行的代码块
} while (条件表达式);
循环会先执行一次代码块,然后在每次迭代时判断条件表达式的值,如果为真则继续执行代码块,否则结束循环。
3.5.6 跳转控制语句
在JavaScript中,跳转控制语句用于改变代码的执行流程,使代码可以跳过某些部分或者重复执行某些部分。JavaScript提供了几种常用的跳转控制语句,包括break、continue和return。
1.break语句: break语句用于终止当前循环或switch语句,并跳出其代码块。当执行到break语句时,程序会立即退出当前循环或switch语句,继续执行后续的代码。break语句通常与循环语句或switch语句配合使用。
示例代码:
for (let i = 1; i <= 5; i++) {
if (i === 3) {
break;
}
console.log(i);
}
// 输出:1 2
2.continue语句: continue语句用于跳过当前循环中的剩余代码,直接进入下一次迭代。当执行到continue语句时,程序会立即跳过当前迭代的剩余代码,继续执行下一次迭代。continue语句通常与循环语句配合使用。
示例代码:
for (let i = 1; i <= 5; i++) {
if (i === 3) {
continue;
}
console.log(i);
}
// 输出:1 2 4 5
3.return语句: return语句用于从函数中返回一个值,并终止函数的执行。当执行到return语句时,函数会立即停止执行,并将指定的值返回给调用者。return语句通常用于函数中,但也可以在任何代码块中使用。
示例代码:
function add(a, b) {
return a + b;
}
let result = add(2, 3);
console.log(result);
// 输出:5
3.5.7 循环例题
for循环:求n的阶乘,(n为正整数):
代码:
var n = prompt("请输入一个正整数");
n = parseInt(n);
var m = 1;
for (var i=1;i<=n;i++){
m*=i;
}
document.write(n+"的阶乘是:"+m)
结果:
while循环:求1-100之间的偶数和:
代码:
var sum1=0;
var b=1;
while(b<=100){
b%2==0;
sum1=sum1+b;
b++;
}
document.write("1-100之间的偶数和为:"+sum1+"<hr/>")
结果:
do-while循环:浏览器中打印,hello,do-while(5次)
代码:
var i = 1;
do{
document.write("hello,do-while<br/>");
i++;
}while(i<=5);
结果:
while-if嵌套:计算水仙花数:
var m=0;
var n=100;
while(n<=999){
var ge=n%10
var shi=(Math.floor(n/10))%10
var bai=(Math.floor(n/10/10))%10
if(n==(ge*ge*ge + bai*bai*bai + shi*shi*shi)){
m++
document.write("第"+m+"次的水仙花是:"+n+"<br/>")
}
n++
}
document.write("水仙花的个数为:"+m+"个")
结果 :
3.6 函数
3.6.1 函数定义
在JavaScript中,函数可以通过函数声明或函数表达式来定义。
函数声明:
function functionName(parameters) {
// 函数体
}
函数表达式:
let functionName = function(parameters) {
// 函数体
};
3.6.2 函数调用
定义函数后,可以通过函数名加上括号的形式来调用函数,并传递相应的参数。
functionName(arguments);
3.6.3 函数参数
函数可以接受零个或多个参数,参数用于传递数据给函数。函数可以在定义时指定参数,也可以在调用时传递参数。
function add(a, b) {
return a + b;
}
let result = add(2, 3);
console.log(result); // 输出:5
3.6.4 函数返回值
函数可以通过return语句返回一个值,将计算结果或处理结果返回给调用者。如果函数没有显式指定返回值,则返回undefined。
function add(a, b) {
return a + b;
}
let result = add(2, 3);
console.log(result); // 输出:5
3.6.5 函数作用域
JavaScript中的函数具有自己的作用域,函数内部定义的变量在函数外部不可访问,而函数外部定义的变量在函数内部也可访问。
let x = 10; // 全局变量
function foo() {
let y = 20; // 局部变量
console.log(x); // 可访问全局变量
console.log(y); // 可访问局部变量
}
foo();
console.log(x); // 可访问全局变量
console.log(y); // 报错,无法访问局部变量
3.7 数组
在JavaScript中,数组是一种用于存储多个值的有序集合。数组可以包含任意类型的数据,包括数字、字符串、对象等。
3.7.1 创建数组
在JavaScript中,有多种方式可以创建数组:
1. 数组字面量:
使用方括号 `[ ]` 来创建数组,并在方括号内用逗号分隔元素。
var array = [1, 2, 3];
2. Array构造函数:
使用 `new Array()` 来创建数组,并在括号内传入元素。
var array = new Array(1, 2, 3);
注意:如果只传入一个参数且该参数是一个数字,则创建一个指定长度的空数组。
var emptyArray = new Array(5); // 创建一个长度为5的空数组
3. Array.from()方法:
使用 `Array.from()` 方法将类数组对象或可迭代对象转换为数组。
var arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3};
var array = Array.from(arrayLike);
4. 使用扩展运算符(Spread Operator):
使用扩展运算符 `...` 可以将一个可迭代对象展开为数组。
var iterable = 'hello';
var array = [...iterable];
注意:扩展运算符只能用于可迭代对象,而不是类数组对象。
5. 使用Array.of()方法:
使用 `Array.of()` 方法根据传入的参数创建数组。
var array = Array.of(1, 2, 3);
这些是创建数组的一些常见方式,根据实际需求选择合适的方式来创建数组。
3.7.2 数组的应用
1.存储和访问数据: 数组可以用来存储一组相关的数据,例如数字、字符串、对象等。通过索引,可以方便地访问和修改数组中的元素。
var numbers = [1, 2, 3, 4, 5];
console.log(numbers[0]); // 输出:1
numbers[1] = 10;
console.log(numbers); // 输出:[1, 10, 3, 4, 5]
2.迭代和遍历: 数组提供了多种遍历方法,可以对数组中的每个元素进行迭代操作。
(1)使用 for
循环遍历数组:
var numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
(2)使用 forEach()
方法遍历数组:
var numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(element) {
console.log(element);
});
3.添加和删除元素: 数组提供了多种方法来添加和删除元素。
(1)使用 push()
方法在数组末尾添加元素:
let numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers); // 输出:[1, 2, 3, 4]
(2)使用 pop()
方法从数组末尾删除元素:
let numbers = [1, 2, 3, 4];
let lastElement = numbers.pop();
console.log(numbers); // 输出:[1, 2, 3]
console.log(lastElement); // 输出:4
(3)使用 splice()
方法在指定位置添加或删除元素:
let numbers = [1, 2, 3, 4, 5];
numbers.splice(2, 0, 6); // 在索引2的位置插入元素6
console.log(numbers); // 输出:[1, 2, 6, 3, 4, 5]
numbers.splice(3, 1); // 删除索引3的元素
console.log(numbers); // 输出:[1, 2, 6, 4, 5]
4.数组方法的应用:数组提供了许多方法来处理和操作数组。
使用 concat()
方法连接两个或多个数组:
var numbers1 = [1, 2, 3];
var numbers2 = [4, 5, 6];
var combinedNumbers = numbers1.concat(numbers2);
console.log(combinedNumbers); // 输出:[1, 2, 3, 4, 5, 6]
使用 slice()
方法提取数组的一部分:
var numbers = [1, 2, 3, 4, 5];
var subArray = numbers.slice(1, 4);
console.log(subArray); // 输出:[2, 3, 4]
使用 sort()
方法对数组进行排序:
var numbers = [3, 1, 4, 2, 5];
numbers.sort();
console.log(numbers); // 输出:[1, 2, 3, 4, 5]
使用 indexOf()
和 lastIndexOf()
方法查找元素在数组中的位置:
var numbers = [1, 2, 3, 4, 5, 3];
console.log(numbers.indexOf(3)); // 输出:2
console.log(numbers.lastIndexOf(3)); // 输出:5
3.8 对象
3.8.1 Date对象
在JavaScript中,Date对象用于处理日期和时间。它提供了一些方法和属性,用于获取、设置和操作日期和时间。下面是一些常用的Date对象的方法和属性:
构造函数:
new Date()
:创建一个表示当前日期和时间的Date对象。new Date(value)
:根据给定的值创建一个Date对象,值可以是表示日期和时间的字符串、时间戳或毫秒数。new Date(year, month, day, hour, minute, second, millisecond)
:根据给定的年、月、日、时、分、秒和毫秒创建一个Date对象。
方法:
getDate()
:返回日期的天数(1-31)。getMonth()
:返回日期的月份(0-11)。getFullYear()
:返回日期的年份。getHours()
:返回时间的小时数(0-23)。getMinutes()
:返回时间的分钟数(0-59)。getSeconds()
:返回时间的秒数(0-59)。getMilliseconds()
:返回时间的毫秒数(0-999)。getTime()
:返回表示日期和时间的毫秒数(从1970年1月1日开始计算的时间戳)。getTimezoneOffset()
:返回当前时区与UTC时间的分钟差。setDate(day)
:设置日期的天数。setMonth(month)
:设置日期的月份。setFullYear(year)
:设置日期的年份。setHours(hour)
:设置时间的小时数。setMinutes(minute)
:设置时间的分钟数。setSeconds(second)
:设置时间的秒数。setMilliseconds(millisecond)
:设置时间的毫秒数。setTime(milliseconds)
:根据给定的毫秒数设置日期和时间。toDateString()
:将日期部分转换为字符串。toTimeString()
:将时间部分转换为字符串。toString()
:将日期和时间转换为字符串。
示例代码:
var now = new Date();
console.log(now); // 输出:当前日期和时间的字符串表示
var date = new Date("2021-01-01");
console.log(date); // 输出:Fri Jan 01 2021 08:00:00 GMT+0800 (中国标准时间)
var timestamp = Date.now();
console.log(timestamp); // 输出:当前日期和时间的时间戳
var year = now.getFullYear();
var month = now.getMonth();
var day = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
var millisecond = now.getMilliseconds();
console.log(year, month, day, hour, minute, second, millisecond); // 输出:当前日期和时间的年、月、日、时、分、秒、毫秒数
now.setFullYear(2022);
now.setMonth(11);
now.setDate(31);
now.setHours(23);
now.setMinutes(59);
now.setSeconds(59);
now.setMilliseconds(999);
console.log(now); // 输出:Sat Dec 31 2022 23:59:59 GMT+0800 (中国标准时间)
var dateString = now.toDateString();
var timeString = now.toTimeString();
var dateTimeString = now.toString();
console.log(dateString, timeString, dateTimeString); // 输出:日期字符串、时间字符串、日期和时间字符串
3.8.2 Math对象
在JavaScript中,Math对象是一个内置对象,提供了一些数学相关的属性和方法,可以用于执行各种数学运算。下面是一些常用的Math对象的属性和方法:
属性:
- Math.PI:表示圆周率π的近似值,约为3.14159。
- Math.E:表示自然对数的底数e的近似值,约为2.71828。
方法:
- Math.abs(x):返回x的绝对值。
- Math.ceil(x):返回大于或等于x的最小整数。
- Math.floor(x):返回小于或等于x的最大整数。
- Math.round(x):返回最接近x的整数。
- Math.max(x1, x2, ...):返回一组数中的最大值。
- Math.min(x1, x2, ...):返回一组数中的最小值。
- Math.pow(x, y):返回x的y次幂。
- Math.sqrt(x):返回x的平方根。
- Math.random():返回一个0到1之间的随机数。
- Math.sin(x):返回x的正弦值。
- Math.cos(x):返回x的余弦值。
- Math.tan(x):返回x的正切值。
- Math.log(x):返回x的自然对数。
- Math.exp(x):返回e的x次幂。
示例代码:
console.log(Math.PI); // 输出:3.141592653589793
console.log(Math.abs(-5)); // 输出:5
console.log(Math.ceil(4.2)); // 输出:5
console.log(Math.floor(4.9)); // 输出:4
console.log(Math.round(4.5)); // 输出:5
console.log(Math.max(2, 4, 6)); // 输出:6
console.log(Math.min(2, 4, 6)); // 输出:2
console.log(Math.pow(2, 3)); // 输出:8
console.log(Math.sqrt(16)); // 输出:4
console.log(Math.random()); // 输出:0.1234567890(随机数)
console.log(Math.sin(Math.PI / 2)); // 输出:1
console.log(Math.cos(Math.PI)); // 输出:-1
console.log(Math.tan(0)); // 输出:0
console.log(Math.log(Math.E)); // 输出:1
console.log(Math.exp(1)); // 输出:2.718281828459045
第四章 结尾
4.1最后附上一道经典算法题(百钱买百鸡)
题目如下:
假设有一个人拿着100元去买鸡,鸡的价格分别为公鸡5元一只、母鸡3元一只和小鸡1元三只。现在要用100元买100只鸡,问公鸡、母鸡和小鸡各买多少只?
思路:
设公鸡的数量为x,母鸡的数量为y,小鸡的数量为z。
根据题目条件可以得到以下三个方程式:
- 5x + 3y + z/3 = 100 (总价格为100元)
- x + y + z = 100 (总数量为100只)
- z % 3 = 0 (小鸡的数量必须是3的倍数)
附源代码:
var x,y,z
for(y=0;y<=33;y++){
for(x=0;x<=22;x++){
z=100-x-y //计算小鸡的数量
if((z%3==0) && ((5*x+3*y+z/3)==100)){ //满足的条件
document.write("公鸡的数量是:"+x+",母鸡的数量是:"+y+",小鸡的数量是"+z+"<hr/>")
}
}
}