1.1 JavaScript历史
创始人:布兰登.艾奇(1961~)
1995年10天完成JavaScript设计。
网景公司最初命名为LiveScript
alert(msg) :浏览器弹出警示框 用于向用户展示
console.log(msg):浏览器控制台输出信息
prompt(info):用户可以输入浏览器弹出输入框
:
用于存储数据的容器,我们通过获取数据,甚至可以修改数据。(变量是装东西的盒子)
var age; //声明一个名字age的变量 (variable变量的含义)
age=10; //给age变量赋值为10
var age = 18 ; //声明变量的同时赋值为18
声明变量并赋值,我们称之为变量的初始化。
1.4.1 更新变量:
变量重新赋值后,其原始值将被覆盖,变量值将以最后一次赋值为准。
var age =18; age =81; ///最终结果是81,因为18被覆盖了
1.4.2 同时声明多个变量:
只需要写一个var,多个变量名用英文逗号隔开,最后一个分号结束。
var age =10, name='zs', sex =2;
1.4.3 声明变量的特殊情况
情况 | 说明 | 结果 |
---|---|---|
var age; console.log(age); | 只声明 不复赋值 | undefined(未定义) |
console.log(age); | 不声明 不赋值 直接使用 | 报错 |
age =10; console.log(age); | 不声明 只赋值 | 10 |
①由字母(A-Za-z)、数字(0-9)(_)、美元符号( ) 组 成 , 如 : ? ? u s r A g e ? ? , ? ? n y m 01 ? ? , ? ? )组成,如:**usrAge**, **nym01**, ** )组成,如:??usrAge??,??nym01∗∗,∗∗name**, _sex
②严格区分大小写。 var app; 和var App; 是两个变量
③不能 以数字开头。 18age 是错误的
④不能 是关键字、保留字。例如:var、for、while
⑤变量名必须有意义。 MMD BBD nl➡age
⑥遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。 myFristName
⑦推荐翻译网站:有道 爱词霸
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ts42D3Fw-1657280263962)(C:\Users\Timi\AppData\Roaming\Typora\typora-user-images\image-20220303094434503.png)]
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。
简单来说,数据类型就是数据的类别型号。比如姓名’‘张三’',年龄18 这些数据的类型是不一样的。
变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。**JavaScript是一种弱类型或者说动态语言。**这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
var age =10; //这是一个数字型
var areYouOk ="是的"; //这是一个字符串
在代码运行时,变量的数据类型是由js引擎的,运行完毕之后,变量就确定了数据类型。
var x = 6; //x为数字型
var x = "Bill"; //x为字符串
JS把数据类型分为两类:
①简单的数据类型(Number,String,Boolean,Undefined,Null)
②复杂数据类型(object)
基本数据类型)
JavaScript中的简单数据类型及其说明如下:
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含 整型值和浮点型值,如21、0.21 | 0 |
Boolean | 布尔值类型,如true、false、等价于1和0 | false |
String | 字符串类型,如"张三" 注意咱们js里面,字符串都带引号 | “” |
Undfined | var a; 声明了变量a但是没有给值,此时a=undefined | undefined |
Null | var a = null; 声明了变量a为空值 | null |
JavaScript数字类型既可以用来保存整数值,也可以保存小数(浮点数)。
var age = 21; //整数
var Age = 21.3747; //小数
2.4.2.1 数字型进制
最常见的进制有二进制、八进制、十进制、十六进制。
//1.八进制数字序列范围:0~7
var num1 = 07; //对应十进制的7
var num2 = 019; //对应十进制的19
var num3 = 08; //对应十进制的8
//2.十六进制数字序列范围:0~9以及A~F
var num = 0xA;
在js中八进制前面加0,十六进制前面加0x
2.4.2.2 数字型范围
JavaScript中数值的最大和最小值
alert(Number.MAX_VALUE); //这个值为:1.7976931348623157e+308
alert(Number.MIN_VALUE); //这个值为:5e-324
2.4.2.3 数字型三个特殊值
alert(Infinity); //Infinity 代表无穷大,大于任何数值
alert(-Infinity); //-Infinity 代表无穷小,小于任何数值
alert(NaN); //NAN Not a number,代表一个非数值
2.4.2.4 isNaN()
用来判断一个变量是否为非数字的类型,返回true或者false
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRl4OIPb-1657280263964)(C:\Users\Timi\AppData\Roaming\Typora\typora-user-images\image-20220408095114977.png)]
var userAge = 21;
var isOk = isNaN(userAge);
console.log(isOk); //false ,21 不是一个非数字
var userName = "andy";
console.log(isNaN(userName));// true,"andy"是一个非数字
var str = "123";
console.log(isNaN(str)) //flase 先隐式转换 再判断
var nan = NaN;
console.log(isNaN(nan)) //true Not a number,代表一个非数值
字符串型可以是引导中的任意文本,其语法为
var strMsg = "我爱北京天安门~"; //使用双引号表示字符串
var strMsg = '我爱吃猪蹄~'; //使用单引号表示字符串
//常见错误
var strMsg3 = 我爱大肘子; //报错,没使用引号,会被认为是js代码,但js没有这些语法
因为HTML标签里面的属性使用的是双引号,js这里我们更推荐使用
2.4.3.1 字符串引号嵌套
js可以用
var strMsg = '我是"高帅富"程序猿'; //可以用''包含""
var strMsg2 = "我是'高帅富'程序猿"; //也可以用""包含''
//常见错误
var badQuotes = 'What on earth?";//报错,不能单双引号搭配
2.4.3.2 字符串转义字符
类似HTML里面的特殊字符,字符串中也有特殊字符, 我们称之为转义符。
转义符都是\开头的,常用的转义符及其说明如下:
转义符 | 解释说明 |
---|---|
\n | 换行符,n是newline的意思 |
\\ | 斜杠\ |
\’ | ’ 单引号 |
\" | " 双引号 |
\t | tab 缩进 |
\b | 空格,b是blank的意思 |
2.4.3.3 字符串长度
字符串是由若干字符组成,这些字符的数量就是字符串的长度。通过字符串的
var strMsg = "我是帅气多金的程序猿!";
alert(strMsg.length); //输出11
2.4.3.4 字符串拼接
①多个字符串之间可以使用 + 进行拼接,其拼接方式为
②拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串
//1.字符串+字符串
alert('hello'+''+'world'); //输出 hello world
//2.数值字符串+数值字符串
alert('100'+'100'); //输出 100100
//3.数值字符串+数值
alert('11'+12); //输出 1112
//4.数值+数值
alert(12+12); //输出 24
2.4.3.4 字符串拼接加强
console.log('pink老师' + 18); //只要有字符串就会相连
var age = 18;
//console.log('pink老师age岁啦'); //错误写法
console.log('pink老师' + age); //输出 pink老师18
console.log('pink老师' + age + '岁啦'); //输出 pink老师18岁啦
①经常会将字符串和变量来拼接,因为变量可以很方便地修改里面的值
②变量是不能添加引号的,因为加引号的变量会变成字符串
③如果变量两侧都有字符串拼接,口诀"引引加加",删掉数字,变量加中间
2.4.4 布尔型 Boolean
布尔类型有两个值:true 和false,其中true表示真(对),false表示假(错)。
布尔型和数字型相加的时候,true的值为1 ,false的值为0.
console.log(true + 1); // 输出 2
console.log(false + 1); //输出 1
2.4.5 Undefined 和 Null
null的加(+)、减(-)、乘(*)、除(/)和取模(%)运算
1、
2、
3、
4、
5、
一个声明后没有赋值的变量会有一个默认值undefined(如果进行相连或者相加时,注意结果)
var variable;
console.log(variable); //输出 undefined
console.log('你好' + variable); //输出 你好undefined
console.log(11 + variable); //输出 NaN
console.log(true + variable); //输出 NaN
一个声明变量给null值,里面存的值为空(学习对象时,继续研究null)
var vari = null;
console.log('你好' + vari); //输出 你好null
console.log(11 + vari); //输出 11
console.log(true + vari); //输出 1
2.5. 获取变量数据类型
2.5.1 获取检测变量的数据类型
typeof可用来获取检测变量的数据类型
根据控制台输出的字体颜色判断数据类型
控制台输出的字体是蓝色的 属于 数字型、输出的字体是黑色的 属于 字符型、输出的字体颜色是深蓝色的 属于布尔型、输出的字体是灰色的 属于 undefined(未定义的)或null。
2.5.2 字面量
字面量是在源代码中一个固定值的表示法,通俗来说,就是字面量表示如何表达这个值。
①数字字面量:8 , 9 , 10
②字符串字面量:‘黑马程序员’ , ‘大前端’
③布尔字面量:true , false
2.6 数据类型转换
2.6.1 什么是数据类型转换
使用表单、prompt获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算,而需要转换变量的数据类型。通俗来说,就是
通常会实现3种方式的转换:
①转换为字符串类型
②转换为数字型
③转换为布尔型
2.6.2 转换为字符串
方式 | 说明 | 案例 |
---|---|---|
toString() | 转成 字符串 | var num = 1; alert(num.toString()); |
String() 强制转换 | 转成 字符串 | var num = 1; alert(String(num)); |
和字符串拼接的结果都是字符串 | var num = 1; alert(num + ‘我是字符串’); |
①toString() 和 String() 使用方法不一样
②三种转换方式,我们更喜欢用第三种加号拼接字符转换,这种方式也称之为隐式转换。
2.6.3 转换为数字型(重点)
方式 | 说明 | 案例 |
---|---|---|
parseInt(string) 函数 | 将string类型转成整数数值型 | parseInt(‘78’) |
parseFloat(string) 函数 | 将string类型转成浮点数数值型 | parseFloat(‘78.21’) |
Number() 强制转换函数 | 将string类型转换为数字型 | Nubmber(‘12’) |
js 隐式转换(- * /) | 利用算术运算隐式转换为数值型 | ‘12’ - 0 |
注意parseInt和parseFloat
2.6.4 转换为布尔型
方式 | 说明 | 案例 |
---|---|---|
Boolean | 其他类型转成布尔型 | Boolean(‘true’); |
①代表
②其余值都会被转换为true
console.log(Boolean('')); //输出 false
console.log(Boolean(0)); //输出 false
console.log(Boolean(NaN)); //输出 false
console.log(Boolean(null)); //输出 false
console.log(Boolean(undefined)); //输出 false
console.log(Boolean('小白')); //输出 true
console.log(Boolean(12)); //输出 true
解释型语言和编译型语言
概述
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcrQnuL9-1657280263965)(C:\Users\Timi\AppData\Roaming\Typora\typora-user-images\image-20220305101121654.png)]
①翻译器的方式有两种:一个是
②编译器是在
③解释器是在
执行过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMsxcGFZ-1657280263966)(C:\Users\Timi\AppData\Roaming\Typora\typora-user-images\image-20220305101644430.png)]
类似于请客吃饭:
①编译语言:首先把所有菜做好,才能上桌吃饭
②解释语言:好比吃火锅,边吃边涮,同时进行
标识符、关键字、保留字
标识符
标识(zhi)符:就是指开发人员为变量、属性、函数、参数取的名字。
标识符不能是关键字或保留字。
关键字
关键字:是指JS本身已经使用了的字,不能再用他们充当变量名、方法名。
包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、swith、this、try、typeof、var、void、while、with等。
保留字
保留字:实际上就是预留的"关键字",意思是现在虽然还不是关键字,但未来可能会成为关键字,同样不能使用它们当变量名或方法名。
包括:boolean、byte、char、class、const、debugger、double、enum、export、extends、fimal、float、goto、implements、import、int、interface、long、mative、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile等。
3. 运算符
运算符(operator)也被称为
JavaScript中常用的运算符有:
①算数运算符
②递增和递减运算符
③比较运算符
④逻辑运算符
⑤赋值运算符
3.1 算术运算符
概念:算术运算使用的符号,用于执行两个变量或值的算术运算。
运算符 | 描述 | 案例 |
---|---|---|
+ | 加 | 10 + 20 =30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
% | 取余数(取模) | 返回除法的余数9 % 2 = 1 |
3.2 浮点数的精度问题
浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。
console.log(0.1 + 0.2); // 结果不是0.3,而是:0.30000000000000004 15个0
console.log(0.07 * 100); // 结果不是7, 而是:7.000000000000001 14个0
所以:
一个数的余数是0就说明这个数能被整除,这就是%取余运算符的主要用途。
3.3 表达式和返回值
表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合
简单理解:是由数字、运算符、变量等组成的式子
3.4 递增和递减运算符
3.4.1 递增和递减运算符概述
如果需要反复给数字变量添加或减去1,可以使用**递增(++)和递减(–)运算符来完成。
在JavaScript中,递增(++)和递减(–)既可以放在变量前面,也可以放在变量后面。
3.4.2 递增运算符
++num前置递增,就是自加1再赋值,类似于num = num +1。 口诀:
num++后置递增,就是先赋值再自加1,类似于num = num ,然后num=num+1 。 口诀:
3.4.3前置递增和后置递增小结
①前置递增和后置递增运算符可以简化代码的编写,让变量的值 +1 比以前写法更简单
②单独使用时,运行结果相同
③与其他代码联用时,执行结果会不同
④后置:先原值运算,后自加(先人后己)
⑤前置:先自加,后运算(先己后人)
⑥开发时,大多使用后置递增/减,并且代码独占一行,例如:num++;或者num–;
3.5 比较运算符
3.5.1 比较运算符概述
概念:比较运算符(关系运算符)是
运算符名称 | 说明 | 案例 | 结果 |
---|---|---|---|
< | 小于号 | 1 < 2 | true |
> | 大于号 | 1 > 2 | false |
>= | 大于等于号(大于或者等于) | 2 >= 2 | true |
<= | 小于等于号(小于或者等于) | 3 <= 2 | false |
== | 判等号(会转型) | 37 == 37 | true |
!= | 不等号 | 37 != 37 | false |
=== !== | 全等 要求值和 数据类型都一致 | 37 === ‘37’ | false |
3.5.2 = 小结
符号 | 作用 | 用法 |
---|---|---|
= | 赋值 | 把右边给左边 |
== | 判断 | 判断两边值是否相等(注意此时有隐式转换) |
=== | 全等 | 判断两边的值和数据类型是否完全相同 |
console.log(18 == '18');
console.log(18 === '18')
3.6 逻辑运算符
3.6.1 逻辑运算符概述
概念:逻辑运算符是用来进行布尔值运算符,其返回值也是布尔值。后面开发中经常用于多个条件的判断
逻辑运算符 | 说明 | 案例 |
---|---|---|
&& | “逻辑与”,简称"与" and | true && false |
|| | “逻辑或”,简称"或" or | true || false |
! | “逻辑非”,简称"非" not | !true |
3.6.2 逻辑与 &&
只有两个都是真,结果才是真。
3.6.3 逻辑或 ||
如果一个为真,则为真;
3.6.4 逻辑非 !
指本来值的反值
3.7运算符优先级
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++ – !(逻辑非的优先级很高) |
3 | 算数运算符 | 先 * / % 后 + - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先&& 后|| (逻辑与比逻辑或优先级高) |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
分支语句
if 的语法结构 如果if
if(条件表达式){
//执行语句
}else{
//执行语句
}
执行思路 如果 if 里面的条件表达式结果为真 true 则执行大括号里面的 执行语句
如果 if 条件表达式结果为假 则不执行大括号里面的语句 则执行if 语句后面的代码
if 多分支语句
多分支语句
就是利用多个条件来选择不同的语句执行 得到不同的结果 多选1 的过程
if else if 语句是多分支语句
语法规范
if(条件表达式1){
// 语句1;
}else if(条件表达式2){
// 语句2;
}else if(条件表达式3){
// 语句3;
}else{
// 最后语句;
}
//执行思路
//如果条件表达式1 满足就执行 语句1 执行完毕,退出整个if 分支语句
//如果条件表达式1 不满足,则判断条件表达式2 满足的话,执行语句2
//如果上面的所有条件表达式都不成立,则执行else 里面的语句
//注意 多个分支语句还是多选1 最后只能有一个语句执行
else if 里面的条件理论上是可以任意多个的
else if 中间有个空格了
swith
swith语句也是多分支语句,它用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以试用swith。
1.swith 语句也是多分支语句 也可以实现多选1
2.语法结构
switch(表达式){
case value1:
执行语句1;
break;
case value2:
执行语句2;
break;
...
default:
执行最后的语句;
}
3.执行思路
利用我们的表达式的值 和case 后面的选项值想匹配 如果匹配上,就执行该case里面的语句 如果都没有匹配上,那么执行 default里面的语句
4注意事项
①我们开发里面 表达式我们经常写成变量
②我们num 的值 和case里面的值相匹配的时候是 全等 必须是值和数据类型一致才可以 num === 1
③break 如果当前的case里面没有break 则不会退出swith 是继续执行下一个case
swith 语句和 if else if 语句的区别
①一般情况下,它们两个语句可以相互替换。
②swith…case 语句通常处理case为比较确定值的情况,而if…else…语句更加灵活,常用于范围判断(大于、等于某个范围)。
③swith 语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else语句有几种条件,就得判断多少次。
④当分支比较少时,if…else语句的执行效率比swith语句高。
⑤当分支比较多时,switch语句的执行效率比较高,而且结构更清晰。
for循环
for重复执行某些代码,通常跟计数有关
for 语法结构
for(初始化变量;条件表达式;操作表达式){
//循环体
}
初始化变量
就是用var声明的一个普通变量,通常用于作为计数器使用
条件表达式
就是用来决定每一次循环是否继续执行 就是终止的条件
操作表达式
是每次循环最后执行的代码 经常用于我们计数器变量进行更新(递增或者递减)
for循环的执行过程
for(var i = 1; i <= 100; i++){
console.log('你好吗');
}
①首先执行里面的计数器变量 var i = 1,但是这句话在for 里面只执行一次 index
②去 i <= 100 来判断是否满足条件,如果满足条件 就去执行 循环体 不满足条件退出循环
③最后去执行 i++ i++是单独写的代码 递增 第一轮结束
④接着去执行i<=100 如果满足条件 就去执行循环体 不满足条件退出
双重for循环
语法结构
for(外层的初始化变量;外层的条件表达式;外层的操作表达式){
for(里层的初始化变量;里层的条件表达式;里层的操作表达式){
//执行语句
}
}
外循环
我们可以把里面的循环看做是外层循环的语句
特点
外层循环循环一次,里面的循环执行全部(执行到不满足条件语句)
for循环小结
①for循环可以重复执行某些相同代码
②for循环可以重复执行些许不同的代码,因为我们有计数器
③for循环可以重复执行某些操作,比如算术运算符加法操作
④随着需求增加,双重for循环可以做更多、更好看的效果
⑤双重for循环,外层循环一次,内层for循环全部执行
⑥for循环是循环条件和数字直接相关的相关
⑦分析要比写代码更重要
⑧一些核心算法想不到,但要是学会,分析它执行过程
while 循环
语法结构
while 当…的时候
while(条件表达式){
//循环体
}