1,逻辑与的短路运算123&&456 数字除了0都为真,遇真继续执行,遇假则短路返回当前假值,所以输出456; 如果是0&&456,则输出0
2,逻辑或的短路运算,遇真则返回最初的真值,全假则返回最后的假值
console.log(123 && 456 && 567 && 789); //789
console.log(123 || false); //123
console.log(null || undefined || 0 || NaN || "你好"); //你好
console.log(0 || undefined || NaN); //NaN
console.log(1 - 2 && 5 * 3); //15
console.log(123 * 0 && 98 + 89); //0
console.log(123 * 0 || 98 + 89); //187
下面的结果受到逻辑或短路运算的影响,还要注意自增运算的特殊情况:
var num = 1;
console.log(123 || num++); //?
console.log(num++); //?
console.log(num); //?
下面终于想到了一个逐步按键递增的方案:后面学习也许可以继续优化
<input type="button" value="每次按我增加1" id="btn">
<br>
<span id="num"></span>
var age = 2;
document.getElementById("btn").onclick = function() {
var val = document.getElementById("num").innerHTML;
console.log(val);
val = val * 1;
if (Boolean(val) == 0) {
document.getElementById("num").innerHTML = autoNumber(age);
} else {
document.getElementById("num").innerHTML = autoNumber(val);
}
function autoNumber(num) {
num++;
return num;
}
}
3,赋值运算符=,+=,-=,*=,/=,%=
4,取余运算小练习
var year = prompt("请输入年份");
if (year % 4 == 0 && year % 100 !== 0 || year % 400 == 0) {
alert(year + "年是闰年");
} else {
alert(year + "年是平年");
}
5,三元表达式:5>9?’学好了’:’没学好’ 输出没学好。表达式是有返回值的。Pink老师的案例,有人问如果输入06会咋么样?会输出006,所以我们需要对输入的数字取整即可。同时要明白prompt输入的字符串数字,在参与运算时是当做数值看待的
var time = prompt("输入数字");
time = parseInt(time); //取整
time = time < 10 ? '0' + time : time;
alert(time);
6,for循环是循环语句的王者(其他还有while 和do while),其结构如下:
for (初始化变量, 条件表达式, 操作表达式) {
//执行语句:循环体
}
//例子:判断执行顺序
for (var i = 1; i <= 100; i++) {
console.log("你好吗?");
} //初始值>条件表达式>循环体>操作表达式>条件表达式>循环体>操作表达式>……
7,断点调试,观察for循环的运行过程
//代码学习
var even = odd = 0;
for (i = 1; i <= 100; i++) {
if (i % 2 == 0) {
even += i;
} else {
odd += i;
}
}
alert("所有偶数的和是" + even);
alert("所有奇数的和是" + odd);
//算班级成绩:
var score = 0;
var num = prompt("输入人数");
for (var i = 1; i <= num; i++) {
score = score + parseInt(prompt("请输入第" + i + "位学员的成绩")); //也可以用乘除法
}
console.log("班级总成绩为" + score);
console.log("班级平均成绩为" + score / num);
8,循环语句while 以及do while
var num = 3;
初始化变量
while (num < 5) { //条件表达式
//循环体
num++; //操作表达式
}
alert();
var num = 3; //初始化变量
do {
//循环体
num++; //操作表达式
} while (num < 5); //条件表达式
alert();
// while比for更灵活一些,可以用在更复杂的条件下;
// 在数字重复计算更推荐for;
// while可能从未被执行,而do while则至少被执行一次。
9,continue 和break: continue 跳出当前次的循环执行下一循环;break是退出当前及之后的所有循环;当我使用while语句和do while语句练习下面的案例时出现了一个不报错的问题:
var sum = 0,
i = 1;
while (i <= 100) {
if (i % 7 == 0) {
continue;
}
sum += i;
i++; //如果i++放在这里,这个程序是不能正常运行的,因为i++并没有被执行,i的值没有变化,这里其实一直在continue
}
console.log(sum); //无法输出,一直运行
正确的代码应该如下面这样,才能得到正确的结果:
var sum = 0,
i = 0;
while (i < 100) {
i++;//避免被continue跳过
if (i % 7 == 0) {
continue;
}
sum += i;
}
console.log(sum); //4315
var sum = 0,
i = 0;
do {
i++;//避免被continue跳过
if (i % 7 == 0) {
continue;
}
sum += i;
} while (i < 100);
console.log(sum); //4315
为什么for循环不会报错呢?for循环中的操作表达式(i++)不是循环体的一部分,但是do while 和while确是。