前端学习第二阶段 学习JS多思考、多尝试
杜绝死记硬背,多思考,理清程序的脉络
当我们遇到想不明白的问题时,一定要理清程序执行的过程,弄明白程序的执行逻辑。这样不仅有助于我们记忆语法知识,更重要的是了解了程序的执行过程可以在以后的编程中少跳坑。学习编程切忌死记硬背,如果不理解程序的执行过程,只记住语法结构,一旦在以后的编程中遇到BUG问题就会不知所措。
例如在学习js逻辑运算的短路逻辑时,老师告诉我们:
&&(与运算)短路逻辑:
语法:表达式1 && 表达式2;
如果第一个表达式的值为真,则返回表达式2
如果第一个表达式的值为假,则返回表达式1
||(或运算)短路逻辑:
语法:表达式1 || 表达式2;
如果第一个表达式的值为真,则返回表达式1
如果第一个表达式的值为假,则返回表达式2
如果死记硬背知识点,只知道“当表达式1为真的时候返回表达式2”,很容易在以后的工作、学习中出现记忆混淆。程序的逻辑出错就会导致BUG产生,产生BUG以后不知道程序的执行逻辑再去找BUG出现的原因就会非常困难。
我们应该多思考为什么程序会这样返回?逻辑短路是在什么情况下发生的?为什么会发生短路?
&&(与运算)执行逻辑:
当表达式1为真的时候,继续执行表达式2,此时无论表达式2是真还是假都会返回表达式2的结果(因为此时表达式2为真时&&运算的结果为“真&&真”直接返回表达式2的结果。若表达式2为假时&&运算的结果为“真&&假”应该返回“假”。所以当表达式1为真时程序不会中断,会继续执行表达式2,并返回表达式2的结果)
当表达式1为假的时候,由于&&运算只要有一个为假即结果为假,所以此时无需判断表达式2的真伪,直接返回表达式1即可,此时程序会中断表达式2的执行。
||(或运算)执行逻辑:
当表达式1为真的时候,由于||运算只要有一个真即结果为真,所以此时无需判断表达式2的真伪,直接返回表达式1,此时程序会中断表达式2的执行。
当表达式1为假的时候,程序会继续判断表达式2的真伪,并且无论表达式2是真还是假都会直接返回表达式2。(因为此时表达式2为真时,||运算结果为“假||真”应该返回表达式2;若表达式2为假,||运算结果为”假||假“也会返回表达式2。此时程序会继续执行表达式2)
理解了&&和||运行的执行过程我们就会明白,程序之所以会短路,是由于逻辑运算符“&&只要有一个条件为假结果就是假”和”||只要有一个条件为真结果就是真“。在表达式1已经可以确定逻辑运算结果的情况下程序就不再执行后面的语句,直接返回逻辑结果。
要有自己的思想,不要被权威左右
学习的过程应该保持怀疑的态度,老师不一定是对的,书本不一定是对的,实践是检验真理的唯一标准。
例如下面这两个题目:
我们知道while循环的执行条件不一定是数字,也可以是布尔值等,例如
while (userName != 'admin' || passWord != '123456') { var userName = prompt("请输入用户名"); var passWord = prompt("请输入密码"); }
但是for循环的条件就一定是数字吗?上学的时候做选择题遇到这种带“一定”、“必须”的选项我都会特别留意,经验告诉我这类选项大部分都是错的。于是我在网上查询了一下JS的循环语句,结果如下:
JavaScript 支持不同类型的循环:
for - 循环代码块一定的次数
for/in - 循环遍历对象的属性
while - 当指定的条件为 true 时循环指定的代码块
do/while - 同样当指定的条件为 true 时循环指定的代码块
for (语句 1; 语句 2; 语句 3){ 被执行的代码块 }
for循环中的语句1、语句2、语句3都是可选项(也就是说不使用语句1、2、3也是可以正常运行的)例如:
for (;;) { var passWord = prompt("请输入密码"); }
这个程序会一直循环请输入密码窗口,这说明for循环条件不一定是数字,同时说明上面两个题目都是有问题的。由于是单选题,所以不存在正确答案。
多尝试改写代码,甚至是把正确的改成错误的
学习的过程中要多尝试改写代码,甚至是把正确的代码改成错的,观察错误的产生过程,这可以帮助我们学习调试程序,并对错误代码加深印象,避免以后跳坑。
让我们来用for循环改写下while循环的练习题——用户登录:
//定义变量存储用户名 var userName = prompt("请输入用户名"); //定义变量存储密码 var passWord = prompt("请输入密码"); //用户名为”admin“,密码为”123456“,则提示用户登录成功!否则,让用户一直输入 for (;userName != 'admin' || passWord != '123456';) { userName = prompt("请输入用户名"); passWord = prompt("请输入密码"); } alert("用户登录成功!");
尝试运行以上代码你会发现它和while循环一样可以实现用户登录需求,这再次证明了for循环的循环条件可以不是数字。
- 点赞
- 收藏
- 关注作者
评论(0)