这是我参与「第四届青训营 」笔记创作活动的的第5天,今天主要分享JavaScript语法以及如何写好JavaScript代码高效率实现编码.
一、本堂课主要内容:
1. JavaScript变量
2. JavaScript基础语法
3. JavaScript对象
4. JavaScript函数
5. JavaScript如何写出高效率代码
二、详细知识
JavaScript变量
JavaScript中的变量相比其他语言的变量声明简单许多,不需要new关键字,不需要像java一样指定数据类型,只需要var和let关键字即可生成变量.
- var生成的变量语法是:var name = "" ,var可以理解为c语言的数据类型,name是变量名字,等于号是赋值,等于号右面是赋值的内容这里默认是字符串.
图1 定义name变量并输出
- let生成的变量语法是let age = 22 ,let也可以理解为c语言的数据类型,age是变量名字,等于号是赋值,等于号右面是赋值的内容这里是证整数.
图2 定义age变量并输出
3.这时候就有小伙伴会问了,var和let都是定义变量,二者有什么区别呢? var可以重复声明同一个变量,而let不可以,let重复声明同一变量会保错.
图3 let定义报错
4.let和var在for循环中迭代变量的区别
图4 var和循环的事情
提问:为什么var作为for迭代变量最终打印5个5?
图5 let和循环的事情
解答:上述俩种情况感觉都应该输出01234,可为什么var作为迭代变量却不行,原因是因为let声明的变量有块级作用域,也就是每循环一次let都是新的变量,而var在循环过程中使用的是同一个变量,由于for循环很快执行完毕,所以最终i = 4,然后延迟后输出就是5个5.5.var可以提前使用、let必须先定义后使用
图6 var和let的作用域
总结:let是es6提出的,让JavaScript拥有了块级作用域,让我们的代码更安全,更规范,解决了未定义先使用的bug.
JavaScript基础语法
JavaScript跟其他编程语法类似,跟C语言基本一致,比如for、while、do...while、if、三元运算符.让我们下文具体案例.
学会变量声明我们看一下JavaScript常见的流程控制和判断控制语句.
if、else if和else
语法规则是这样if(条件){执行语句}else if(条件){执行语句}else{都不满足执行的语句}
图7 if的简单使用
图8 if和else if的简单使用
图7 if和else的简单使用
当然
if和else if可以无限嵌套但是else只能有一个..while循环
语法 while(条件){执行的语句 要让条件有变化否则就是死循环}
图8 while循环
while循环
语法for(迭代变量,判断循环条件,步进){执行的语句}
图9 for循环
JavaScript对象
<script> var stu = {'id':1111,'sex':'boy','name':'xl'} console.log(stu); console.log(stu.id , stu.name , stu.sex); </script>JavaScript中的对象也是变量需要va或者let声明,整体信息需要用花括号包起来,然后键值对的形式写入进去
图10 控制台输出对象信息
当然JavaScript的对象也可以加函数方法,语法规则是函数名:function (){}
<script> var stu = {'id':1111,'sex':'boy','name':'xl',introudce : function (){ console.log(`名字:${this.name} 性别:${this.sex}`); }} stu.introudce(); </script>
图11 对象里的函数
补充:this在对象里指的是本身,谁在调用自己.
JavaScript的函数
<script> function add(n1,n2[){](url) return n1+n2; } let res = add(10,10); console.log(res); </script>语法规则:function 函数名 (参数){语句}
图12 JavaScript里的函数
JavaScript如何写出高效率代码
评价一个代码的好坏需要衡量多个标准,虽然一个好的算法需要看时空复杂度。但是也需要看具体使用场景,假设一个o(n*m)的算法和o(n)的算法前者比后者思路简单代码少,同时m和n并不是很大优先考虑算法1,这点说明了场景的重要性. 在写JavaScript代码时候需要各司其职,html控制结构,css专门写样式,JavaScript写行为,自己负责自己的区域,不要乱写,然后就是考虑算法的好坏,以及语法的规范性了。
三、练手项目
昼夜切换
昼夜切换这个项目主要利用JavaScriptdocument获取button元素然后监听button单击,通过button单击状态切换对应body的css实现昼夜交换,同时在切换样式的时候使用一个属性
transition: all 0.5s;动画可以让切换的更加圆滑.下面是html、css、js的代码.<body class="night"> <div class="content"> <header> <button id ='modeBtn'>kg</button> <h1>深夜食堂</h1> </header> <main> <div class="pic"> <img src="https://p2.ssl.qhimg.com/t0120cc20854dc91c1e.jpg"> </div> <div class="description"> <p> 这是一间营业时间从午夜十二点到早上七点的特殊食堂。这里的老板,不太爱说话,却总叫人吃得热泪盈 眶。在这里,自卑的舞蹈演员偶遇隐退多年舞界前辈,前辈不惜讲述自己不堪回首的经历不断鼓舞年轻人,最终令其重拾自信;轻言绝交的闺蜜因为吃到共同喜爱的美食,回忆起从前的友谊,重归于好;乐观的绝症患者遇到同命相连的女孩,两人相爱并相互给予力量,陪伴彼此完美地走过了最后一程;一味追求事业成功的白领,在这里结交了真正暖心的朋友,发现真情比成功更有意义。食物、故事、真情,汇聚了整部剧的主题,教会人们坦然面对得失,对生活充满期许和热情。每一个故事背后都饱含深情,情节跌宕起伏,令人流连忘返 [6] 。 </p> </div> </main> </div> </body><style> .night{ background-color: black; color: white; transition: all 0.5s; } .day{ background-color:white; color: black; transition: all 0.5s; } </style><script> setTimeout(() => { const btn = document.getElementById('modeBtn'); btn.addEventListener('click', (e) => { const body = document.body; if(body.className !== 'night') { body.className = 'night'; } else { body.className = 'day'; } }); }, 1); </script>
JavaScript判断4的幂
4的幂有:1,4,16,64,256.... 通过构建一个input和button搭建html结构,然后使用js代码判断结果,通过document获取输入框的值,然后转为数字然后循环模4,如果模的过程有余数直接修改输入框的css将颜色变为红色,然后退出循环,假设都循环完毕,最后判断是否为1,是的话就是说刚好除4商为1说明就是4的幂,否则不是,下面是代码:
<script> function isPowerOfFour() { var num = document.getElementById('val').value; num = parseInt(num); while(num > 1) { if(num % 4) { document.getElementById('val').style.color = "red"; return 1; } num /= 4; } if(num == 1) { document.getElementById('val').style.color = "green"; }else{ document.getElementById('val').style.color = "red"; } } </script><input type="number" name="" id="val"> <button onclick="isPowerOfFour()">检测</button>
四、个人总结
写JavaScript代码和写c++、java代码一样需要严谨的思维,注重解耦抽象过程,组件化使得效率更高,同时注意代码的作用域,减少一些异常,多读别人写的代码,提高我们的代码效率.