目录
JS语言是解释型语言
一、编译型语言(Java等语言)
优点:运行速度快,代码效率高,编译后的程序不可修改,保密性较好。
缺点:代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行 。
二、解释型语言(JavaScript、Python等)
优点:可移植性较好,只要有解释环境,可在不同的操作系统上运行。
缺点:运行需要解释环境,运行起来比编译的要慢,占用资源也要多一些,代码效率低,代码修改后就可运行,不需要编译过程
一、运算符
1.赋值运算符
对变量进行赋值的运算符,
左边必须是一个容器
赋值运算符:= += -= *= /= %=
let num = 1
num += 1
2.一元运算符
使用一元运算符做自增运算
可以根据所需表达式的个数分为:一元运算符、二元运算符、三元运算符
自增:++
自减:--
使用场景:
经常用于
计数
来使用。 比如进行10次操作,用它来计算进行了多少次了
前置自增:++num
后置自增:num++
前置自增和后置自增单独使用没有区别
但是,如果参与运算就有了区别
后面 i++ 后置自增会使用相对较多,并且都是单独使用
//前置自增和后置自增 在运算时有区别
let i = 1
// console.log(i++ + 2); //4 i=1 i++ i+1=2 2+2=4
console.log(++i + 2); //3 i=1 i+2=1+2=3 i++ i=i+1=2
后置++ : 不用管++,直接用i初始值带入计算 ,计算完再进行i+=1
let a = 1
console.log(a++ + ++a + a);
//1+3+3=7 a++后置自增成a=2但是运算时a=1 ++a前置自增变成a=2+1=3 剩下的a现在已经是3了
3.比较运算符
1. = 和 == 和 === 怎么区别?
= 是赋值
== 是判断 只要求值相等,不要求数据类型一样即可返回true
=== 是全等 要求值和数据类型都一样返回的才是true
开发中,请使用 ===
2. 比较运算符返回的结果是什么?
结果只有2个, true 或者 false
注意:
NaN不等于任何值,包括它本身 (NaN 不等于 NaN) 涉及到"NaN“ 都是false
尽量不要比较小数,因为小数有精度问题
不同类型之间比较会发生隐式转换(所以开发中,如果进行准确的比较我们
更喜欢 ===
或者 !==)
字符串比较,是比较的字符对应的ASCII码
Ø
从左往右依次比较
Ø
如果第一位一样再比较第二位,以此类推
Ø
比较的少,了解即可
4.逻辑运算符
使用场景:
逻辑运算符用来解决多重条件判断
正确写法:num>5
&&
num<10
错误写法:5<num<10
5.运算符优先级
一元运算符里面的
逻辑非优先级很高
逻辑与&&比逻辑或||优先级高
二、语句
1.表达式和语句
表达式举例: num = 3 + 4
语句举例: alert() 弹出对话框 console.log() 控制台打印输出
表达式:
因为表达式可被求值,所以它可以写在赋值语句的右侧
语句:
而语句不一定有值,所以比如 alert() for和break 等语句就不能被用于赋值。
某些情况,也可以把表达式理解为表达式语句,因为它是在计算结果,但不是必须的成分 (例如continue语句 )
2.分支语句
程序三大流程控制语句:顺序结构、分支结构、循环结构
分支语句可以让我们有
选择性
的执行想要的代码,包括:IF分支语句、三元运算符、Switch语句
(1)If 语句
分为:单分支、双分支、多分支
// 单分支语句
if (true) {
console.log('执行语句')
}//有输出‘执行语句’
if (false) {
console.log('执行语句')
}//没有输出‘执行语句’
注意:除了空字符串,所有字符串为真;除了0,所有数字为真
(2)三元表达式
比 if 双分支 更简单的写法,可以使用 三元表达式
符号:? 与 : 配合使用
let num = 3 < 5 ? 3 : 5
console.log(num);
一般用来取值
(3)switch 语句
释义:
Ø
找到跟小括号里数据
全等
的case值,并执行里面对应的代码
Ø
若没有全等
===
的则执行default里的代码
Ø
例:数据若跟值2全等,则执行代码2
注意:
1. switch case语句一般用于等值判断,不适合于区间判断
2. switch case一般需要配合break关键字使用 没有break会造成case穿透
3.循环语句
(1)断点调试
作用
:学习时可以帮助更好的理解代码运行,工作时可以更快找到bug
浏览器打开调试界面
1. 按F12打开开发者工具
2. 点到sources一栏
3. 选择代码文件
断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来
(2)while循环
while : 在…. 期间, 所以 while循环 就是在满足条件期间,重复执行某些代码
while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出
(是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。)
while循环需要具备三要素
:()
1.
变量起始值
2.
终止条件(没有终止条件,循环会一直执行,造成死循环)
3.
变量变化量(用自增或者自减)
循环结束:
Ø
break:退出循环
Ø
continue:结束本次循环,继续下次循环
区别:
Ø
continue
退出本次循环
,
一般用于排除或者跳过某一个选项的时候, 可以使用continue
Ø
break
退出整个循环
,
一般用于结果已经得到, 后续的循环不需要的时候可以使用
(3)for循环
let sum = 0
for (let i = 1; i <= 100; i++) {
if (i % 2 === 0) {
sum += i
}
}
document.write(`1-100之间偶数和为${sum}`)
(4)for循环嵌套
案例:九九乘法表
四、数组
数组:(Array)是一种可以按顺序保存数据的
数据类型
遍历数组(重点)
let arr = ['刘德华', '青湖原', '莫山', '周处', '风风']
// 遍历
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
操作数组(重要)
数组本质是数据集合, 操作数据无非就是
增 删 改 查
语法:
1 改
// 修改
let arr1 = ['add', 'dff', 'fff']
arr1[0] = 'uuu'
console.log(arr1);//['uuu', 'dff', 'fff']
2 增(重点)
push()
方法将指定的元素添加到数组的末尾,并返回新的数组长度。
// push 末尾
let arr = ['pink', 'hotpink']
arr.push('deeppink')
console.log(arr);//['pink', 'hotpink', 'deeppink']
// unshift 前面
let arr = ['pink', 'hotpink']
arr.unshift('red')
console.log(arr);//[['red', 'pink', 'hotpink']
3 删
数组. pop()
方法从数组中删除最后一个元素,并返回该元素的值
数组. shift()
方法从数组中删除第一个元素,并返回该元素的值
数组. splice()
方法 删除指定元素
4 例-数组筛选
let arr = [2, 4, 5, 833, 67, 90]
// 1.声明新的空的数组
let newArr = []
// 2.遍历旧数组
for (let i = 0; i < arr.length; i++) {
// 3.满足条件 追加给新的数组
if (arr[i] >= 10) {
newArr.push(arr[i])
}
}
// 4.输出新的数组
console.log(newArr);
五、案例-数据生成柱状图(难)
六、冒泡排序
冒泡排序是一种简单的排序算法
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重 复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
比如数组 [2,3,1,4,5] 经过排序成为了 [1,2,3,4,5] 或者 [5,4,3,2,1]
七、数组排序
数组. sort() 方法可以排序
let arr = [4, 2, 5, 1, 3]
// 1.升序排列写法
arr.sort(function (a, b) {
return a - b
})
console.log(arr) // [1, 2, 3, 4, 5]
// 降序排列写法
arr.sort(function (a, b) {
return b - a
})
console.log(arr) // [5, 4, 3, 2, 1]