js书写位置
1、行内式
可以将单行或少量 JS 代码写在HTML标签的事件属性中(以 on 开头的属性),如:onclick
可读性差, 在html中编写JS大量代码时,不方便阅读;
引号易错,引号多层嵌套匹配时,非常容易弄混; 注意单双引号的使用:在HTML中我们推荐使用双引号, JS 中我们推荐使用单引号
特殊情况下使用
2、内嵌式
可以将多行JS代码写到 script 标签中
3、外部JS文件
利于HTML页面代码结构化,把大段 JS代码独立到 HTML 页面之外,既美观,也方便文件级别的复用
引用外部 JS文件的 script 标签中间不可以写代码 <script src="my.js"></script>
注释
单行注释快捷键 ctrl + /
多行注释alt + shift + a
输入输出语句
alert(msg):浏览器弹出警示框
console.log(msg):浏览器控制台打印输出信息
prompt(info):浏览器弹出输入框,用户可以输入
变量
变量的概念
1、变量是用于存放数据的容器
2、本质:变量是程序在内存中申请的一块用来存放数据的空间。
变量的使用
声明变量
var 是一个 JS关键字,用来声明变量( variable 变量的意思 )
赋值:= 用来把右边的值赋给左边的变量空间中 此处代表赋值的意思
变量的初始化: 声明一个变量并赋值
变量语法扩展
1、一个变量被重新复赋值后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准。
2、同时声明多个变量时,只需要写一个 var, 多个变量名之间使用英文逗号隔开。
3、声明变量特殊情况
只声明 不赋值 undefined
不声明 不赋值 直接使用 报错
不声明 只赋值 值
4、 变量命名规范
由字母(A-Za-z)、数字(0-9)、下划线(_)、美元符号( $ )组成
严格区分大小写。var app; 和 var App; 是两个变量
不能 以数字开头
不能 是关键字、保留字
变量名必须有意义
遵守驼峰命名法。首字母小写,后面单词的首字母需要大写
数据类型
概念
数据类型就是数据的类别型号
变量是用来存储值的所在处,它们有名字和数据类型
JavaScript 是一种弱类型或者说动态语言
这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定
JS引擎 根据 = 右边变量值的数据类型来判断
数据类型分为两类:
简单数据类型 (Number,String,Boolean,Undefined,Null)
数字型 Number
在JS中八进制前面加0,十六进制前面加 0x
最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
最小值:Number.MIN_VALUE,这个值为:5e-32
Infinity ,代表无穷大,大于任何数值
-Infinity ,代表无穷小,小于任何数
NaN ,Not a number,代表一个非数值
isNaN:判断是否为非数字的类型,是返回false,不是返回true
字符串型 String
字符串引号嵌套:外双内单,外单内双
字符串转义符:
\n 换行符
\ \ 斜杠 \
\' 单引号
\" 双引号
\t 缩进
\b 空格
通过字符串的 **length** 属性可以获取整个字符串的长度。
例: var strMsg = "我是帅气多金的程序猿!";
alert(strMsg.length); // 显示 11
字符串拼接
字符串 + 任何类型 = 拼接之后的新字符串
变量是不能添加引号的,因为加引号的变量会变成字符串
布尔型Boolean
布尔类型有两个值:true 和 false
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0
Undefined
声明后没有被赋值的变量会有一个默认值undefined (
和数字相加结果为 NaN,和字符串相加是相连
Null
存的值为空
和数字相加时结果为 0+数字,和字符串相加是相连
复杂数据类型 (object)
获取变量数据类型
typeof 可用来获取检测变量的数据类型
prompt 取过来的值是 字符型
可以根据控制台数据的颜色判断数据类型 蓝色为数字型 黑色为字符型 深蓝色为布尔型 浅灰色为undefined、null
字面量:字面上表示如何表达这个值
数据类型转换
把一种数据类型的变量转换成另一种数据类型
转换为字符串
toString()
String()
加号拼接字符串转换方式, 这一种方式也称之为隐式转换、
转换为数字型
parseInt()整数型
括号里是小数取整不存在进位问题直接去掉小数点后的, 如果括号里是数字加单位会自动去掉单位
parseFloat()浮点数数值型
Number()
隐式转换是我们在进行算数运算的时候,JS 自动转换了数据类型
转换为布尔型
Boolean()
代表空、否定的值会被转换为 false ,如 ''、0、NaN、null、undefined
其余值都会被转换为 true
操作符
算数运算符
算术运算使用的符号,用于执行两个变量或值的算术运算。
加+ 减- 乘* 除/ %取余
浮点数的精度问题:不要直接判断两个浮点数是否相等 表达式和返回值
是由数字、运算符、变量等组成的式子
表达式最终都会有一个结果,返回给开发者,称为返回值
递增和递减运算符
反复给数字变量添加或减去
注意:递增和递减运算符必须和变量配合使用
前置递增运算符:先自加,后返回值
后置递增运算符:先返回原值,后自加
比较运算符
比较运算后,会返回一个布尔值
小于< 大于> 大于等于>= 小于等于<= 等于(会转型)== 不等于!= 恒等于(值和数据类型都一致)=== 恒不等!==
赋值运算符
= 直接赋值
+= -= 先加减一个值后赋值
*= /= %= 先乘除取余后赋值
逻辑运算符
逻辑与&&:两边都是 true才返回 true,否则返回 false
逻辑或 ||:两边都是 false才返回 false,否则返回 false
逻辑非 !:取反符,用来取一个布尔值相反的值
短路运算(逻辑中断)
当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值;
运算符优先级
1 小括号
2 一元运算符 ++ -- ! 非优先级最高
3 算术运算符 先*/% 后 + -
4 关系运算符
5 相等运算符
6 逻辑运算符 先&&后||
流程控制
流程控制就是来控制代码按照一定结构顺序来执行
顺序流程控制
按照代码的先后顺序,依次执行
分支流程控制
if 语句
// 条件成立执行代码
if (条件表达式) {
// 条件成立执行的代码语句
}
//不成立则往下继续执行if语句后面的代码
if else语句(双分支语句)
// 条件成立 执行 if 里面代码,否则执行else 里面的代码
if (条件表达式) {
// [如果] 条件成立执行的代码
} else {
// [否则] 执行的代码
}
if else if(多分支语句)
// 适合于检查多重条件。
if (条件表达式1) {
语句1;
} else if (条件表达式2) {
语句2;
} else if (条件表达式3) {
语句3;
....
} else {
// 上述条件都不成立执行此处代码
}
三元表达式
表达式1 ? 表达式2 : 表达式3;
如果表达式1为 true ,则返回表达式2的值,如果表达式1为 false,则返回表达式3的值
类似于 if else (双分支) 的简写
switch分支流程控制
switch( 表达式 ){
case value1:
// 表达式 等于 value1 时要执行的代码
break;
case value2:
// 表达式 等于 value2 时要执行的代码
break;
default:
// 表达式 不等于任何一个 value 时要执行的代码
}
注意: 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句。
效率高(直接跳转到匹配值),但范围小(需要固定值)
循环
for循环
语法结构
for(①初始化变量; ②条件表达式;③ 操作表达式 ){
//④循环体
}
初始化变量
初始化一个计数器,使用 var声明的变量,帮我们来记录次数
在整个 for 循环只会执行一次
条件表达式
确定每一次循环是否能被执行
操作表达式
用于计数器变量进行更新(递增或递减)
执行过程:
①--②--④--③--②--④--③...
断点调试:
断点调试可以帮助观察程序的运行过程
断点调试的流程:
1、浏览器中按 F12--> sources -->找到需要调试的文件-->在程序的某一行设置断点
2、Watch: 监视,通过watch可以监视变量的值的变化,非常的常用。
3、摁下F11,程序单步执行,让程序一行一行的执行,这个时候,观察watch中变量的值的变化。
双重for循环
循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构
语法:
for (外循环的初始; 外循环的条件; 外循环的操作表达式) {
for (内循环的初始; 内循环的条件; 内循环的操作表达式) {
需执行的代码;
}
}
内层循环可以看做外层循环的循环体语句
内层循环执行的顺序也要遵循 for 循环的执行顺序
外层循环执行一次,内层循环要执行全部次数
while循环
语法结构:
while (①条件表达式) {
// ②循环体代码
}
执行思路:
①--②--...
注意:
使用 while 循环时一定要注意,它必须要有退出条件,否则会成为死循环
do-while循环
语法结构;
do {
// ①循环体代码 - 条件表达式为 true 时重复执行循环体代码
} while(②条件表达式);
执行思路:
①--②--...
注意:
先再执行循环体,再判断,do…while循环语句至少会执行一次循环体代码
continue、break
continue
跳出本次循环,继续下一次循环
break
立即跳出整个循环(循环结束)
数组
概念
把一组相关的数据一起存放,提供方便的访问(获取)方式
是一组数据的集合
其中的每个数据被称作元素
可以存放任意类型的元素
创建数组
利用 new 创建数组
var 数组名 = new Array() ;
注意 Array () ,A 要大写
利用数组字面量创建数组
var 数组名 = [];
数组的字面量是方括号 [ ]
声明数组并赋值称为数组的初始化
数组元素的类型
可以存放任意类型的数据,例如字符串,数字,布尔值等。
获取数组中的元素
索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始)
通过索引来访问、设置、修改对应的数组元素
注意:如果访问时数组没有和索引值对应的元素,则得到的值是undefined
遍历数组
把数组中的每个元素从头到尾都访问一次
数组的长度
默认情况下表示数组中元素的个数
数组名.length
设置的length属性值大于数组的元素个数,则会在数组末尾出现空白元素
置的length属性值小于数组的元素个数,则会把超过该值的数组元素删除
增加新元素
通过索引增加元素
arr[i]=新数据
索引i不存在,在数组的末尾插入新元素
索引i存在,则替换存在的元素