8.29JS第2天

JS第2天学习笔记

一、循环退出

<script>
		
		// 逢7过
		for (var i = 1; i < 100; i++){
			
			// 如果i是7的倍数或者i中有7
			if (i%7==0 || i%10==7 || (i>69&&i<80)){
				// continue 立即结束本次循环的执行,执行控制循环变量修改,然后再进入循环
				// 立即结束当前次循环,直接执行下一次循环
				console.log("过!")
				continue
			}
			
			console.log(i)
		}
		
		// 循环100次
		for (var i=0;i<100;i++){
			
			if (i == 66){
				// break 直接结束循环,break之后的循环代码不再执行
				// break 结束离它最近的循环
				break
			}
			
			console.log(i)
		}
		
		for (var i=0;i<10;i++){
			
			for(var j=0;i<10;j++){
				
				if (j == 5){
					// 当前这个break只能结束内层循环
					break
				}
				console.log(i*j)
			}
		}
		
		var num = 1;
		while(num < 2019){	
			if (num%4==0 && num%1000==0){
				console.log(num)
				// 修改控制循环变量值,让循环条件不成立,也可以结束循环
				// num = 3000
				break
			}
			num ++
		}
	</script>
	

二、函数

<script>
		// 函数:封装了一段功能代码的代码块
		// function 关键字,用于声明一个函数
		// 格式: function 函数名(参数列表){函数体}
		// 函数名和变量名的命名规范一致,遵守小驼峰命名法,参数之间用,逗号隔开
		function eat(){
			// 函数执行的业务逻辑代码
			console.log("买菜")
			console.log("洗菜")
			console.log("切菜")
			console.log("炒菜")
			console.log("吃饭!")
		}
		// 调用函数
		eat()
		
		// 参数: 执行函数时必要的一些数据
		// 去商店买水
		function byWater(money){
			// money参数可以不传递,默认值undefined
			if (money == 2){
				console.log("农夫山泉")
			}else if(money == 3){
				console.log("百事可乐")
			}else{
				
				console.log("你要啥?")
			}
		}
		// 调用函数
		byWater(10)
		// 函数可以多次重复调用
		// byWater(20)
		
		// 多个参数
		function byWater2(money, name){
			console.log("你给了" + money + "元,要买" + name)
		}
		// 调用多个参数函数时,需要将参数依次传入
		byWater2(10, "康师傅矿泉水")
		
		
		// 带返回值的函数
		function byFood(money, name){
			
			console.log("你给了" + money + "元,买" + name)
			
			if (name == "泡面"){
				
				var ye = money - 4
				// return 结束函数执行并返回函数执行结果
				return ye
			}else if(name == "火腿肠"){
				
				var ye = money - 2
				return ye
			}
		}
		// 声明变量接收函数执行返回的结果
		// 将右侧函数执行返回结果, 赋值给变量m
		var m = byFood(10, "泡面")
		
		var m2 = byFood(m, "火腿肠")
		
		
	</script>
	

三、变量作用域

<script>
		
		// 直接在script下直接声明的变量
		var outer = 10;	
		function f1(){
			// 函数内部可以使用函数外部定义的变量
			console.log(outer)
			// 函数内部声明的变量
			var inner = 20;
			function f2(){			
			}
		}
		f1()
		// 在函数外部不能使用函数内部声明定义的变量
		// console.log(inner)
		
		// 变量是定在作用域中的
		// 代码最外层的作用域(全局域),在全局域中声明的变量叫做全局变量(作用域范围:从声明开始到整个全局域结束)
		// 一个函数的内部会形成一个独立的作用域,叫做局部作用域,在这个作用域中声明的变量叫做局部变量(作用域范围:从声明开始到局部作用域结束)
		
		// 局部作用域中可以使用全局变量,但是在全局域中不能使用局部变量
		
		// ==========================================
		
		// 全局变量
		var num = 10;
		function f3(){
			// js代码在执行之前,会被预处理,进行函数和变量的声明,变量声明会被提前但是赋值不会提前
			// undefined js中的一个设计缺陷 ES6 之后 js的严格模式(所有的变量必须先声明后使用)
			console.log(num)		
			// 在局部作用域中声明了变量,和全局变量同名,局部变量会覆盖全局变量
			// 在局部作用中声明局部变量时,不要和全局变量同名,否则会导致局部范围内全局变量被覆盖
			var num = 20;
			// 20
			console.log(num)
		}	
		f3()
		// 10
		console.log(num)	
	</script>


四、switch-case分支结构

<script>
		// prompt() 在弹窗输入内容
		var day = prompt("今天星期:")*1
		// 根据数字输出英文版的周几
		// if (day == 1){
		// 	console.log("Monday")
		// }else if(day == 2){
		// 	console.log("Tuesday")
		// }
		console.log(day)
		// switch语法结构
		// switch(变量){ case 值: xxxxx; break}
		// switch 中 case检测的值的类型必须和变量值的类型一致
		switch (day){
			case 1:
				console.log("Monday")
				break;
			case 2:
				console.log("Tuesday")
				break;
			case 3:
				console.log("Wednesday")
				break;
			case 4:
				console.log("Thursday")
				break;
			case 5:
				console.log("Friday")
				break;
			case 6:
				console.log("Saturday")
				break;
			case 7:
				console.log("Sunday")
				break;
			default:
				console.log("没有这一天!")
				break;
		}
		
		// ==================================
		var month = prompt("请输入月份!") *1
		switch (month){
			case 2:
			case 3:
			case 4:
				console.log("春天")
				break;
			case 5:
			case 6:
			case 7:
				console.log("夏天")
				break;
			case 8:
			case 9:
			case 10:
				console.log("秋天")
				break;
			case 11:
			case 12:
			case 1:
				console.log("冬天")
				break;
			default:
				console.log("没有这个月份!")
				break;	
		}
		
		// 判断两个变量是否相等
		var a = 10;
		var b = "10";
		// == 比较的等号两边变量的值是否相等,不进行类型判断
		// === 如果要同时判断值和类型都是否相等,可以使用===
		// == 和 === 有什么区别?
		if (a === b){
			console.log("相等")
		}else{
			console.log("不相等")
		}
	</script>
	

五、Math对象及常用的数学方法

<script>
		// js中有很多系统自带的对象,称之为内置对象
		// Math对象是js中内置对象
		
		// 数学函数和表达式
		console.log(Math.PI)
		// 自然对数
		console.log(Math.E)
		
		
		// abs() 绝对值函数
		console.log(Math.abs(-10))
		
		// pow() 幂运算 ,计算x的y次方
		console.log(Math.pow(3,4))
		
		// sqrt 开平方运算
		console.log(Math.sqrt(9))
		
		// 开多次方运算 pow
		console.log(Math.pow(27,1/3))
		
		// 三角函数
		// Math.sin()
		// Math.cos()
		// Math.tan()
		// Math.cot()
		
		// max() 取最大值,找到出最大的值
		console.log(Math.max(4564,487,412,45,10000))
		// min() 取最小值
		console.log(Math.min(1,45,7854,7554,455))
		
		// floor() 向下取整
		console.log(Math.floor(1.6))
		// ceil() 向上取整
		console.log(Math.ceil(1.2))
		// round() 四舍五入
		console.log(Math.round(1.5))
		
		// random() 生成0~1之间的随机小数
		console.log(Math.random())
		
		console.log(Math.random()*100)
		
		// 生成-100~100随机数
		console.log(Math.random()*200 - 100)
		
		// 生成 50~100随机数
		console.log(Math.random()*50 + 50)
		
	</script>

六、小例子1.个人所得税计算器

<body>
	<input id="money" type="text" placeholder="请输入您的税前工资">
	<br>
	<button onclick="calcTax()">计算</button>
	<button onclick="calcTax()">计算2</button>
	<p id="result"></p>
	<!-- 
		税前工资:10000
		五险一金有封顶上限:7662  例如:税前工资10000  五险一金 = 7662 * 0.225  税前工资5000  五险一金 = 5000*0.225
		五险一金:22.5%		
		应纳税所得额 = 税前工资 - 社保 - 起征点(5000)
		税额 = 应纳税所得额 * 适用税率 - 速算扣除数
		超过起征点的部分按照税级选择税率,然后减去速算扣除数。
	    范围						  税率% 速算扣除数
	1 	不超过1500元的 	        	3 	   0
	2 	超过1500元至4,500元的 		10     105
	3 	超过4,500元至9,000元的 	 	20 	   555
	4 	超过9,000元至35,000元的 	 	25 	   1,005
	5 	超过35,000元至55,000元的	    30 	   2,755
	6 	超过55,000元至80,000元的 	35 	   5,505
	7 	超过80,000元的 	            45 	   13,505
		 -->
	<script>
		function calcTax(){		
			// 1.获取用户输入的税前工资
			var money = document.getElementById("money").value
			// 当获取的money为空时,提示需要输入工资再进行计算
			// console.log(money)
			// console.log("")
			if (money != ""){
				// 2.计算五险一金金额
				var shebao;
				// 判断税前工资是否大于上限7762
				if (money >= 7662){
					shebao = 7662 * 0.225
				}else{
					shebao = money * 0.225
				}
				// 3.计算应纳税所得额
				var ynssde = money - shebao - 5000
				// 4.判断应纳税所得额所在的阶梯
				var shuie;
				// 5.根据阶梯税率和速算扣除
				if (ynssde <= 0){
					shuie = 0
				}else if(ynssde <= 1500){
					shuie = ynssde * 0.03
				}else if(ynssde <= 4500){
					shuie = ynssde * 0.1 -105
				}else if(ynssde <= 9000){
					shuie = ynssde * 0.2 - 555
				}else if(ynssde <= 35000){
					shuie = ynssde * 0.25 - 1005
				}else if(ynssde <= 55000){
					shuie = ynssde *0.3 - 2755
				}else if(ynssde <= 80000){
					shuie = ynssde * 0.35 - 5505
				}else{
					shuie = ynssde * 0.45 - 13505
				}
				// 6.计算到手工资  到手工资 = 税前工资 - 社保 - 税额
				var myMoney = money - shebao - shuie
				// 7.将计算结果显示到页面上
				var rsP = document.getElementById("result")
				rsP.innerText = "到手工资:" + myMoney.toFixed(2) + ",税额:" + shuie.toFixed(2) + ",社保:" + shebao.toFixed(2)
				
			}else{
				// alert() 弹窗
				alert("请填写工资后再进行计算!")
			}		
		}
	</script>
</body>

小例子2:猜数字游戏

<body>
	<input id="number" type="text" placeholder="请输入0~100内的整数"><br>
	<button onclick="submit()">提交</button>
	
	<script>
		
		// 生成随机数
		// Math 数学对象 一些常用的数学公式
		// random() 0~1
		// console.log(Math.random()*100)
		// 生成一个0~100范围内的随机整数
		// var answer = Math.floor(Math.random()*100)
		
		// var num = 1.2
		// Math.floor()向下取整
		// Math.ceil()向上取整
		// num = Math.floor(num)
		
		// 1.生成一个随机整数作为答案
		var answer = Math.floor(Math.random()*100)
		console.log(answer)
		// 声明变量,记录当前猜测的次数
		var count = 1
		function submit(){	
			if (count > 5){
				var rs = confirm("次数已用完,是否重新开始?")
				if (rs){
					// 重置答案
					answer = Math.floor(Math.random()*100)
					// 重置次数
					count = 0
					alert("答案已重置,请重新开始!")
				}
				// return 强制结束函数执行.return之后的代码不会再执行
				return
			}
			
			// 2.获取用户输入的答案
			var userAS = document.getElementById("number").value
			if (userAS == ""){
				
				alert("请输入数字后再提交!")
			}else{
				// 3.比较正确答案和用户输入的答案
				if (userAS > answer){
					// 		3.1 用户答案>正确答案 显示 猜大了
					alert("猜大了!")
					// 猜测次数+1
					count ++
				}else if(userAS < answer){
					//  	3.2 用户答案<正确答案 显示 猜小了
					alert("猜小了")
					count ++
				}else{
					//      3.3 用户答案==正确答案 显示 猜对了
					// alert("恭喜您,猜对了!")
					// confirm() 确定和取消按钮,并且会返回点击的是哪个按钮
					var rs = confirm("恭喜您,猜对了!是否继续玩?")
					// 判断是否要继续玩
					if (rs){
						// 重置答案
						answer = Math.floor(Math.random()*100)
						// 重置次数
						count = 0
					}
				}
			}
		}
	</script>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值