编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并得到结果的过程
计算机程序:就是计算机所执行的一系列问题的指令集合,而程序全部都是用我们所掌握的语言来编写的,所以人们要控制计算机一定要通过计算机语言向计算机发出命令
计算机语言指用于人与计算机之间通讯的语言,它是人与计算机之间传递信息的媒介。计算机语言种类非常多,总的来说课可以分成机器语言、汇编语言和高级语言三大类
可以通过类似于人类语言的“语言”来控制机器,让计算机为我们做事情,这样的语言就叫做计算机语言
编程语言是用来控制计算机的一系列指令,它有固有的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守
如今通用的编程语言有两种形式:汇编语言和高级语言
编程语言:有很强的逻辑和行为能力。在编程语言里,有很多具有逻辑性和行为能力的指令,这是生动的
标记语言:不同于向计算机发出指令,常用于格式化和链接。标记语言的存在是用来被读取的。这个是被动的
输入设备
输出设备
CPU
硬盘
内存
计算机内部使用二进制表示数据
所有数据,包括文件、图片等最终都是以二进制数据的形式存放在硬盘中的
所有程序,包括操作系统,本质都是各种数据,也以二进制数据的形式存放在硬盘中,平时我们所说的安装软件,其实就是把程序文件复制到硬盘中
硬盘、内存都是保存二进制数据
存储单位
bit 1byte = 8 bit / 其他的都与 1 kb = 1024 byte 类似
打开某个程序时,先从硬盘中把程序的代码加载到内存中
CPU执行内存中的代码
注意:之所以要内存的重要原因,是因为CPU运行太快了,如果只是从硬盘中读取数据,会浪费cpu性能。所以,才使用存取速度更快的内存来保存运行时的数据
Javascript是一种运行在客户端的脚本语言
现在也可以基于Node.js技术进行服务端编程
浏览器执行JS简介
JS的组成
JS有3种书写位置,分别为行内、内嵌和外部
行内式
内嵌式
// 单行注释 Ctrl + /
/*
这为多行注释 默认:Shift + Alt + A
*/
为了方便信息的输入和输出,JS提供了一些输入输出语句
方法 | 说明 | 归属 |
---|---|---|
alert(msg) | 浏览器弹出警示框 | 浏览器 |
console.log(msg) | 浏览器控制台打印输出信息 | 浏览器 |
prompt(info) | 浏览器弹出输入框,用户可以输入 | 浏览器 |
变量就是一个存放数据的容器,我们通过变量名获取数据,甚至数据可以修改
变量是程序在内存中申请用来存放数据的空间
变量在使用的过程中分为两步:1. 声明变量 2. 赋值
var age; // 声明一个名称为age的变量
var
是一个JS关键字,用来声明变量(variable)。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管理- age是程序员定义的变量名,我们要通过变量名来访问内存中分配的空间
age = 10; // 给age这个变量赋值为10
console.log(age); // 输出结果
- 用来把右边的值赋给左边的变量空间中,赋值
- 变量值是程序员保存到变量空间里面的值
var age = 18; // 声明变量的同时赋值为18
声明变量的同时赋值叫做变量的初始化
var name;
name = prompt("请输入你的名字"); // 输入姓名之后,存储到一个name变量里面
alert(name); // 输出姓名
一个变量被重新赋值以后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准
同时声明多个变量时,只需要写一个var,多个变量名之间使用英文的逗号隔开
var age = 18;
var name = "李华";
// 这样写太麻烦了,可以这样写
var age = 18,
name = "李华";
情况 | 说明 | 结果 |
---|---|---|
var age; console.log(age) | 只声明变量 不赋值 | underfined |
console.log(age) | 不声明,不赋值,直接使用 | 报错 |
age = 10;console.log(age) | 不声明,只赋值 | 10 |
var name1 = "lihua";
var name2 = "xiaoming"; // 交换名字
var temp = name1; // temp存储临时值
name1 = name2;
name2 = temp;
在计算机中,不同的数据所占用的存储空间是不同的,为了便于吧数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型
变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机内存中。JS是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行的过程中,类型会被自动确定
var num; // 不确定是什么数据类型
num = 10; // 数字类型
num = "hello"; // 重新赋值后,变成字符串类型
在代码运行时变量的数据类型是由JS引擎根据 = 右边变量值的数据类型来判断的,运行完毕之后,变量就确定了数据类型
js是动态语言,变量的数据类型是可以变化的
JS把数据类型分为两类
数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含整型值和浮点型值 | 0 |
Boolean | 布尔型值 | false |
String | 字符串类型 | “” |
Undefined | var a;声明了变量但是没有赋值 | undefined |
Null | var a = null; 声明了变量a为空值 | null |
最常见的进制有二进制、八进制、十六进制、十进制
var num1 = 010; // 数字前面加一个0代表八进制
console.log(num1)
var num2 = 0x9; // 数字前面加一个0x代表十六进制
JS中的最大值和最小值
alert(Number.MAX_VALUE); // 1.79769e + 308
alert(Number.MIN_VALUE); // 5e - 324
alert(Infinity); // 无穷大,大于任何数值
alert(-Infinity); // 无穷小,小于任何值
alert(NaN); // 代表一个非数值
// isNaN() 这个方法用来判断非数字,并且返回一个布尔类型的值
console.log(isNaN(12)); // 返回值为false
字符串型可以是引号中的任意文本,其语法为双引号""
、单引号''
JS可以使用单引号嵌套双引号,或者用双引号嵌套单引号(外双内单、外单内双)
类似于HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符
转义符都是以\
开头,常用的转义符
转义符 | 解释说明 |
---|---|
\n | 换行符 |
\\ | 斜杆\ 转义 |
\’ | 单引号 |
\" | 双引号 |
\t | 缩进 |
\b | 空格 |
检测获取字符串的长度
字符串是由若干个字符组成的,这些字符的数量就是字符的长度。通过字符串的length
属性可以获取整个字符串的长度
var str = "my name is make";
console.log(str.length); // 打印字符串的长度
+
进行拼接,其拼接方式为字符串 + 任何类型 = 拼接之后的新字符串console.log("沙漠" + "骆驼"); // 字符串的拼接 +
// 只要有字符串和其他类型相拼接,最终的结果都是字符串类型
console.log("1" + 18 + true); // 输出为118true
加强
var age = 18;
console.log("i am" + age + "岁"); // 变量拼接
布尔类型有两个值:true、false
一个声明变量没有被赋值的变量会有一个默认值undefined
一个声明变量个null值,里面存储的值为空
var vari = undefined;
var flag = 10;
console.log(vari + flag); // 结果为NaN
var space = null;
console.log(space + flag); // 返回10
typeof
可以用来检测变量的数据类型
var num = 10,
str = "lihua",
flag = true,
vari = undefined;
console.log(typeof num);
console.log(typeof str);
console.log(typeof flag);
console.log(typeof vari);
prompt 获取的值是字符串类型的数据类型
字面量:在源代码中一个固定值的表示法
使用表单、prompt获取过来的数据默认是字符串类型的数据,此时就不能直接简单的进行加法的相加,而需要转换变量的数据类型。通俗来说,就是把一种数据类型的变量转换成另外一种数据类型
方式 | 说明 | 案例 |
---|---|---|
toString() | 转换成字符串 | var num = 1; alert(num.toString()); |
String() | 转换成字符串 | var num = 1; alert(String(num)); |
加号拼接字符串 | 和字符串拼接的结果都是字符串 | var num = 1; alert(num + “hello”); |
方式 | 说明 | 案例 |
---|---|---|
parseInt(String) | 将String类型转换成整数数值 | parseInt(“12”) |
parseFloat(String) | 将String类型转换成浮点数值型 | parseFloat(“12.0”) |
Number() | 将String类型强制转换为数值型 | Number(“12”) |
js隐式转换(- * /) | 利用算术运算隐式转换为数值类型 | “12” - 0 |
注意parseInt和parseFloat的字母大小写
隐式转换是我们常用的转换方法
方式 | 说明 | 案例 |
---|---|---|
Boolean() | 其他类型转换成布尔值 | Boolean(“true”); |
代表空、否定的值被转换成false;其余的转换成true
运算符也被称为操作符,是用于实现赋值、比较和执行算术运算等功能的符号
+(加)、-(减)、*(乘)、/(除)、%(取余)
console.log(1 + 1);
console.log(1 - 1);
console.log(1 * 2);
console.log(2 / 1);
console.log(5 % 3);
浮点数精确度远远不如整数,不要直接判断两个浮点数的运算结果是否相等
表达式:是由数字、运算符、变量等以能求得数值的有意义排列方式所得的组合
表达式最终都会有一个结果,返回给我们,我们成为返回值
var num = 1 + 1; // 接收返回值
如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减(–)运算符来完成
在JS中,递增和递减既可以放在运算符前面,也可以放在运算符后面。放在变量前面时,我们称之为前置递增运算符,放在变量后面时我们称之为后置递增运算符
递增和递减运算符必须和变量配合使用
var num = 10;
++num;
console.log(num); // 先自加1后返回值
console.log(++num * 2); // 24
var num = 10;
num++;
console.log(num); // 先放回值,后自加1
console.log(num++ * 2) // 22
前置递增和后置递增运算符都可以简化代码的编写,让变量的值 +1
单独使用时,运行结果相同
与其他代码联用时,执行结果不同
概念:逻辑运算符是用来进行布尔运算的运算符,其返回值是布尔类型
运算符 | 说明 | 案例 |
---|---|---|
&& | 逻辑与 and | true && false |
|| | 逻辑或 or | true || false |
! | 逻辑非 not | ! true |
短路运算的原理:当有很多表达式时,左边的表达式可以确定结果时,就不再继续运算右边的表达式的值
短路运算的原理:当有很多表达式时,左边的表达式可以确定结果时,就不再继续运算右边的表达式的值
// 逻辑与短路运算 如果表达式1 结果为真 则返回表达式2 如果表达式1为假 那么返回表达式1
console.log(123 && 456); // 返回456
console.log(0 && 1); // 返回0
console.log(0 && 1 + 2 && 456 + 123); // 返回0
// 逻辑或短路运算 如果表达式1 结果为真 则返回的是表达式1 如果表达式1 结果为假 则返回结果表达式2
console.log(123 || 456); // 返回123
console.log(0 || 1); // 返回1
console.log(0 || 1 + 2 || 456 + 123); // 返回2
// 逻辑中断很重要,它会影响我们程序运行结果的表达
逻辑与短路运算 如果表达式1 结果为真 则返回表达式2 如果表达式1为假 那么返回表达式1
逻辑或短路运算 如果表达式1 结果为真 则返回的是表达式1 如果表达式1 结果为假 则返回结果表达式2
逻辑中断很重要,它会影响我们程序运行结果的表达
概念:比较运算符是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值作为比较运算的结果
<
(大于)、>
(小于)、<=
(小于等于)、>=
(大于等于)、==
(等于)、!=
(不等于)、===
(全等)、!==
(不全等)
==
默认会转换数据类型,会把字符串类型转换成数字类型
console.log(18 == "18"); // true
console.log(18 != "18"); // false
console.log(18 === "18"); // false
概念:用来把数据赋值给变量的运算符
=
(赋值)、 +=
(加等于)、 -=
(减等于)、 /=
(除等于)、 *=
(乘等于)、 %=
(余等于)
下表按从最高到最低的优先级列出Javascript运算符。具有相同优先级的运算符按从左至右的顺序求值
运算符 | 描述 |
. [] () | 字段访问、数组下标、函数调用以及表达式分组 |
++ -- - ~ ! delete new typeof void | 一元运算符、返回数据类型、对象创建、未定义值 |
* / % | 乘法、除法、取模 |
+ - + | 加法、减法、字符串连接 |
<<>> >>> | 移位 |
<<= > >= instanceof | 小于、小于等于、大于、大于等于、instanceof |
== != === !== | 等于、不等于、严格相等、非严格相等 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
?: | 条件 |
= oP= | 赋值、运算赋值 |
, | 多重求值 |
在程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能
简单理解:流程控制就是来控制我们的代码执行按照什么样的顺序来执行
流程控制主要有三种结构:顺序结构、分支结构和循环结构,这三种结构代表代码执行的顺序
顺序结构就是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
由上而下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
// if语法结构
/*
if ( 条件表达式1 ) {
// 执行语句1
} else if ( 条件表达式2 ) {
// 执行语句2
} else {
// 执行语句
}
*/
// 如果if条件表达式结果为假,则不执行大括号里面的语句,执行if语句后面的代码
if (3 > 5) {
alert("3大于5");
}
else {
alert("3小于5");
}
// 条件表达式 ? 表达式1 : 表达式2 ;
// 如果条件表达式结果为真,则返回表达式1的值
var num = 5;
var result = if num > 5 ? "对呀" : "很可惜不是的" ;
alert(result)
switch语句也是多分支语句,它用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值选项时,就可以用switch
// switch语句也是多分支结构,可以实现多选一的结果
// 语法结构 switch转换
/* switch (表达式) {
case value1:
执行语句1;
break;
···
default:
执行最后的语句;
}*/
// 代码验证
var num = parseInt(prompt("请输入一个数字"));
switch (num) {
case 1:
alert("输入为一");
break;
case 2:
alert("输入为2");
break;
default:
alert("无法识别");
}
我们的num的值和case里面的值相匹配的时候是全等的关系,必须是值和数据类型一致才可以
如果当前的case里面没有break,则不会退出switch,是继续执行下一个case
循环的目的:可以重复执行某些语句
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为循环语句
for 重复执行某些代码,通常跟计数有关系
/*
初始化变量就是用var声明的一个普通变量,通常用于作为我计数器使用
条件表达式就是用来决定吗,每一次循环是否继续执行,就是终止条件
操作表达式就是每次循环最后执行的代码,经常用于我们计数器变量进行更新(递增或者递减)
for (初始化变量; 条件表达式; 操作表达式) {
循环体
}
*/
for (var i = 1; i <101; i++) {
console.log("这是一个循环结构");
}
for循环可以执行重复不同的代码,这主要是因为使用了计数器,计数器在每次循环过程中都会有变换
for (var i = 1; i <= 100; i++) {
console.log("tom,今年" + i + "岁了");
}
for循环因为有了计数器的存在,我们还可以重复执行某些操作,比如算术运算
// 求和
var sum = 0;
for (var i = 1; i <101; i++) {
sum += i;
}
console.log("和为:" + sum);
// 求1到100之间能被3整除的数字的和
var sum1 = 0;
for (var i = 1; i <=100; i++) {
if (i % 3 == 0) {
sum1 += i;
}
}
console.log(sum1);
循环嵌套是指在一个循环语句中,再定义一个循环语句的语法结构
外循环循环一次,里面的循环执行全部
// 打印乘法口诀表,倒三角
var str_all = "" // 存储得到的值
for (var i = 1; i <= 9; i++) { // 控制行数
for (var j = i; j <= 9; j++) { // 控制列数
str_all += i + "x" + j + "=" + i*j + "\t";
}
str_all += "\n";
}
console.log(str_all);
while循环语句可以在条件表达式为真的前提下,循环执行指定的代码,直到表达式不为真时结束循环
while ( 条件表达式 ) {
// 循环体代码
}
执行思路
var str = "",
num = 1;
while (num <= 100 ) {
num++;
str += "你好呀\n";
}
console.log(str);
// 乘法口诀表
var str = "",
row = 1;
while (row <= 9) {
var col = 1;
while (col <= row) {
str += row + "x" + col + "=" + col*row + "\t";
col++;
}
row++;
str += "\n";
}
console.log(str);
do···while 语句其实是while语句的一个变体。该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环
do {
// 循环体
} while ( 条件表达式 )
执行思路
continue关键字用于立即跳出本次循环,继续下次循环(本次循环中continue之后的代码就会少执行一次)
break 关键字用于立即跳出整个循环(循环结束)
数组的概念:使用数组可以把一组相关的数据一起存放,并提供方便的访问方式。数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式
// 普通变量
var num = 10;
// 数组一次可以存储多个值
var arr = [1, 2, 3, 4, 5];
利用new关键字创建数组
var 数组名 = new Array();
var arr = new Array(); // 创建一个新的数组
利用数组字面量创建数组
// 1、 使用数组字面量方式创建空的数组
var 数组名 = [];
// 2、 使用数组字面量方式创建带初始值的数组
var 数组名 = ["小白", "小黑", 2, true];
数组里面的数据一定使用逗号分隔
索引(下标):用来访问数组元素的序号(数组下标从0开始)
数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的元素
var arr = ["小白", "小黑", 2, true];
console.log(arr[0]);
for (var i = 0; i <4; i++) {
console.log(arr[i]);
}
因为我们的数组索引号从0开始,所以 i 必须从 0 开始 i <4
输出的时候 arr[i] i计数器当做索引号使用
length 用于获取数组的长度
for (var i = 0; i
}
可以通过修改length的长度以及索引号增加数组元素
可以通过修改length的大小来实现数组扩容的目的
length是可读写的
arr.length = 5; // 手动修改数组长度为5,数组里面应该有5个元素
// 添加的默认值是undefined
通过修改数组索引号的方法新增数组元素
可以通过修改数组索引号的方式追加数组元素
var arr1 = ["小白", "小黑", 2, true];
arr1[4] = 5;
console.log(arr1.length); // 追加一个元素
// 如果该索引号已有值,则会替换原来的数组元素
不要直接给数组元素赋值,否则会覆盖里面的数组元素
var arr = [2, 0, 6, 80, 56, 56, 0] // 要求将数组里面大于50的数字存储到新数组里面
var new_arr = []; // 刚开始数组的索引为0
for (var i = 0; i
// 新数组索引号从0开始,依次递增
new_arr[neww_arr.length] = arr[i];
}
}
冒泡排序
var arr = [1, 5, 0, 6, 66, 9, 564, 1212, 12] // 对数组进行排序,升序
for (var i = 0; i
var temp = arr[j]; // 临时存储变量
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);