提示:
for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。
例子如下
for (var i = 0; i < 9; i++) {console.log(i);// more statements
}
通用格式
for ([initialization]; [condition]; [final-expression])statement
initialization
(声明一个可以计数的变量)
一个表达式 (包含赋值语句) 或者变量声明。典型地被用于初始化一个计数器。该表达式可以使用 var 或 let 关键字声明新的变量,使用 var 声明的变量不是该循环的局部变量,而是与 for 循环处在同样的作用域中。用 let 声明的变量是语句的局部变量。该表达式的结果无意义。
condition
(变量不再变化或者跳出for循环的结束条件)
一个条件表达式被用于确定每一次循环是否能被执行。如果该表达式的结果为 true,statement 将被执行。这个表达式是可选的。如果被忽略,那么就被认为永远为真。如果计算结果为假,那么执行流程将被跳到 for 语句结构后面的第一条语句。
final-expression
(变量递增或者递减的规则)
每次循环的最后都要执行的表达式。执行时机是在下一次 condition 的计算之前。通常被用于更新或者递增计数器变量。
statement
只要condition的结果为 true 就会被执行的语句。要在循环体内执行多条语句,使用一个块语句({ … })来包含要执行的语句。没有任何语句要执行,使用一个空语句(;)。
例子如下
var i = 0;
for (; i < 9; i++) {console.log(i);// more statements
}
for (var i = 0; ; i++) {console.log(i);if (i > 3) break;// more statements
}
for (;;) {if (i > 3) break;console.log(i);i++;
}
以下 for 循环计算 final-expression 部分中节点的偏移位置,它不需要执行一个 statement 或者一组 block statement ,因此使用了空语句。
function showOffsetPos(sId) {var nLeft = 0,nTop = 0;for (var oItNode = ElementById(sId) /* initialization */;oItNode /* condition */;nLeft += oItNode.offsetLeft,nTop += oItNode.offsetTop,oItNode = oItNode.offsetParent /* final-expression */); /* 分号 semicolon */console.log("Offset position of '" +sId +"' element:n left: " +nLeft +"px;n top: " +nTop +"px;",);
}/* Example call: */showOffsetPos("content");// Output:
// "Offset position of "content" element:
// left: 0px;
// top: 153px;"
提示:
for…in 语句以任意顺序迭代一个对象的除Symbol以外的可枚举属性
,包括继承的可枚举属性。
var obj = { a: 1, b: 2, c: 3 };for (var prop in obj) {console.log("obj." + prop + " = " + obj[prop]);
}// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
它最常用的地方应该是用于调试,可以更方便的去检查对象属性(通过输出到控制台或其他方式)。尽管对于处理存储数据,数组更实用些,但是你在处理有key-value数据(比如属性用作“键”),需要检查其中的任何键是否为某值的情况时
,还是推荐用for … in
提示
for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
const array1 = ['a', 'b', 'c'];for (const element of array1) {console.log(element);
}// Expected output: "a"
// Expected output: "b"
// Expected output: "c"
let iterable = "boo";for (let value of iterable) {console.log(value);
}
// "b"
// "o"
// "o"
let iterable = new Set([1, 1, 2, 2, 3, 3]);for (let value of iterable) {console.log(value);
}
// 1
// 2
// 3
let iterable = new Map([["a", 1],["b", 2],["c", 3],
]);for (let entry of iterable) {console.log(entry);
}
// ["a", 1]
// ["b", 2]
// ["c", 3]for (let [key, value] of iterable) {console.log(value);
}
// 1
// 2
// 3
提示:
语句创建一个执行指定语句的循环,直到condition值为 false。在执行statement 后检测condition,所以指定的statement至少执行一次
。
dostatement
while (condition);
var result = "";
var i = 0;
do {i += 1;result += i + " ";
} while (i < 5);
ElementById("example").innerHTML = result;
提示
: 语句评估一个表达式,将表达式的值与case子句匹配,并执行与该情况相关联的语句。
switch (expression) {case value1:// 当 expression 的结果与 value1 匹配时,执行此处语句[break;]case value2:// 当 expression 的结果与 value2 匹配时,执行此处语句[break;]...case valueN:// 当 expression 的结果与 valueN 匹配时,执行此处语句[break;][default:// 如果 expression 与上面的 value 值都不匹配,执行此处语句[break;]]
}
const expr = 'Papayas';
switch (expr) {case 'Oranges':console.log('Oranges are $0.59 a pound.');break;case 'Mangoes':case 'Papayas':console.log('Mangoes and papayas are $2.79 a pound.');// Expected output: "Mangoes and papayas are $2.79 a pound."break;default:console.log(`Sorry, we are out of ${expr}.`);
}
如果你忘记添加 break,那么代码将会从值所匹配的 case 语句开始运行,然后持续执行下一个 case 语句而不论值是否匹配。
for in 用于遍历可枚举对象属性,for of 用于可迭代对象定义要迭代的数据
do while 语句的do 至少执行一次,执行完才会判断condition
switch case 忘记break 一直会执行下去,直到遇见break 或者return 直到函数执行完毕
关注下方微信公众号,了解更多内容
本文发布于:2024-01-31 11:45:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170667273728284.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |