Swtich-case分支结构
使用场景:等值判断,意味着如果需要判断范围,switch不合适
注意是全等于 值和类型都等于才会满足条件
switch (v) {
case '红烧肉':
document.querySelector('span').innerHTML = '好吃'
break
case '辣椒炒肉':
document.querySelector('span').innerHTML = '挺好吃'
break
case '水煮肉片':
document.querySelector('span').innerHTML = '真香'
break
case '回锅肉':
document.querySelector('span').innerHTML = '下饭'
break
default:
document.querySelector('span').innerHTML = '还有好吃的?'
break
}
三元表达式
语法: 表达式 ? 操作1 : 操作2
使用场景:根据条件获取值,或者根据条件执行某个操作 后期较为常用
while循环和do-while循环
区别 while是先判断后执行 do-while先执行一次再判断是否需要循环
其他循环
forEach:单纯的循环操作
// 可以遍历整个数组,每次将数组的元素值和对应的索引传递给回调函数的value,index属性
// 语法: 数组.forEach(function(value,index){处理})
map:可以遍历整个数组,执行传入的回调函数,并将回调函数的返回值存储到新数组中,最终将新数组返回
filter:执行传入的回调函数,将回调函数执行结果为true的数据留下来,最终将数据返回
冒泡排序
外层循环控制比较多少轮 内层循环控制每轮比较多少次
由于每轮循环都会找到一个最大值,意味着后面的循环的次数可以减少
let arr = [12, 3, 4345, 123, 2, 234, 3, 54, 5, 67, 5, 8] // 5
// 需求:将数组的值从小到大排序
// 添加一个循环控制比较几轮
for (let i = 0; i < arr.length - 1; i++) {
// i = 0
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
// console.log(arr)
}
面向对象
找到能够实现功能的对象,调用它的成员实现相应的操作
有对象就调用,没有就自己封装
简单类型和复杂类型
- 简单类型:值类型:字符串,数值,bool值
- 引用类型:对象,数组,函数
- 特点:如果值类型数据做为参数,那么函数中进行操作操作不会影响原始数据
- 如果引用类型做为参数,会造成实参和形参指向相同的地址空间,函数中的操作会影响原始数据
创建对象的几种方式
语法糖
let arr = {}
构造函数
- 它是一个函数,可以接收参数
- 它的定义,要求首字母大写
- 不要以普通函数的方式调用构造函数,它会失去构造函数的功能
- 以new 调用构造函数
new做了什么
- 创建对象,开辟空间
- 将创建的对象的地址赋值给this
- 为this添加成员并赋值
- 将this的地址返回
缺点
造成内存的浪费 因为现在的代码是每个对象都有一块空间存储方法
解决:将方法提取到全局 将方法添加到原型 但是会造成全局污染