这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天。
控制结构
if
var name = 'jia'
if (name == 'jiajia') {
document.write('hello,jiajia')
} else if (name == 'xiaojia') {
document.write('hello,xiaojia')
} else {
document.write('stranger')
}
while循环
var a = 18
while (a <= 20) {
a++
console.log(a)
}
// 输出 21
// 共循环 3 次
// 先判断后循环
dowhile循环
var a = 18
do {
a++
console.log(a)
} while (a <= 20)
// 输出 21
// 共循环 3 次
// 先循环后判断
当初始变量在条件以内,while和dowhile一样
当初始变量在条件以内,while不执行循环,dowhile循环执行一次
作用域
建议用let和const
因为作用域不同会有下方两种结果
for循环
var name = 'red'
var age = '18'
for (let i = 0; i<=5; i++) {
age++
console.log(age)
}
// 即对age进行6次+1循环
// 最终输出24
// 一整次循环完成后会进行i++
// 代码执行顺序:判断i是否小于等于5=>满足进行age++并将age打印到控制台=>进行i++(再进行此步骤直到i不满足条件停止循环)
循环的过程得到的
i
和age
值如下:(只要i <= 5,就会进入循环,执行age++。i的初始值为0 ,满足i <= 5的有0,1,2,3,4,5;即共进行6次循环)
Switch语句(条件分支语句)
var name = 'bell'
switch (name) {
case 'red':
console.log('hello,red')
break
case 'blue':
console.log('hello,blue')
break
default:
console.log('A stranger')
}
// switch () 选择一个变量
// case : 表示进行一次选择(或者叫判断),当switch选择的变量与此处要判断的值相等时,执行csae:后的语句,break表示此次选择结束,跳出该语句进行后续代码的执行。
// default: 是在所有case选择都不满足时进行的,会执行default:后的语句
当switch中case后没有进行break结束时,会得到下面结果:
others
var name = 'red'
var age = 22
var allowed = (age >= 18) ? 'yes':'no'
console.log(allowed)
// var allowed = (age >= 18) ? 'yes':'no'
// 判断age是否满足条件,如果满足条件,把‘yes’赋值给allowed,否则将‘no’赋值给allowed
对象(object)
- 新建一个对象
var obj = New Object()
--- 方法一
var obj ={}
---方法二
{键:值} (键:值)叫做键值对
一个对象中放置多个键值对时,各个键值对之间用逗号隔开
- 对象的操作(对象内键值对的操作)
- 增:向对象内增加一个键值对(两种方法)
- 删:使用delete关键字(两种方法)
- 改:与增加键值对的方法一样(对象不重名特点)
- 查:访问对象内某一个键的值
数组
- 新建一个数组
var a = new Array()
---方法一
var a = []
---方法二
数组可以看作是一个对象
一个数组并不一定每个位置都有内容
常用的遍历数组方式:for循环
var a = new Array();
var b = [];
// 给a数组的第0个位置开始添加一个内容
a[0] = 'dog';
// 给a数组的第1个位置开始添加一个内容
a[1] = 'cat';
// 给a数组的第5位开始添加一个内容,并且查看中间未添加的内容会输出什么?会是空格,输出a[2]会得到(undefined) 因此一个数组并不一定每个位置都有内容
a[5] = 'tiger';
console.log(a)
b = ['dog', 'cat', 'tiger'];
console.log(b);
// 取出数组中每一个值的方法
// 使用for循环 i的初始值定义为0(因为数组是从0开始计数的)
for (var i = 0; i < b.length; i++) {
console.log(b[i])
}
for in循环
ES5中加入了更方便的遍历方式:for in循环
var a = new Array();
a[0] = 'dog';
a[1] = 'cat';
a[5] = 'tiger';
// 给一个i,让i在a的范围内进行计数(也就是i++)
for (let i in a) {
console.log(a[i])
}
// 未被定义的值不会被打印在控制台
// 使用for循环遍历数组a的时候会出现undefined
var a = new Array();
a[0] = 'dog';
a[1] = 'cat';
a[5] = 'tiger';
for (var i = 0; i < a.length; i++) {
console.log(a[i])
}
循环的过程如下:
var b = []
b = ['dog', 'cat', 'tiger'];
b.push('sheep')
console.log(b)
// 会在b数组末尾增加'sheep'(第四个位置,第三项)
// 向数组第一位添加元素 b.unshift('sheep')
var b = []
b = ['dog', 'cat', 'tiger'];
b.pop()
console.log(b)
// 删除第一个元素用 b.shift()
var b = []
b = ['dog', 'cat', 'tiger'];
b.reverse()
console.log(b)
函数
- 函数定义阶段(下面列举一个名为fn的函数的定义阶段)
function fn() {
装在盒子里的代码
}小括号中的内容叫做形参(一个只能在函数内部使用的特殊变量)
- 函数的调用阶段
函数名()其中,函数名指要调用的函数的名称 小括号中的内容叫做实参(即给形参从左到右赋值)
函数的返回值:给函数调用添加一个结果(使用return 结果)
// 定义一个变量
let a = 1
// 定义一个求和函数
function add(x) {
a += x
}
// 调用函数
add(2)
// 此处执行了a=a+x=1+2=3
console.log(a)
制作一个求和函数
function add( ) {
let sum = 0
// 让i遍历每一个j arguments.length指变量的个数(第一行add()中数据的个数)
for (let i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i]
}
return sum
}
let sum = add()
console.log(sum)
闭包
回调函数是向方法里传入一个函数,让这个方法使用这个函数
闭包是这个函数返回一个函数
制造一个加法器
function makeAdder(a) {
return function(b) {
return a + b
}
}
var x = makeAdder(5)
// x是一个方法,a是5
var sum = x(6) //此处的x变成了方法【function(b) {
return a + b】
console.log(sum) //11