Moh*_*hal 1 javascript for-loop operators
此代码按我的预期工作,将输入值作为 javascript 函数的参数,以在 html 文档中生成年份选择器(选择器中的结果年份从您在(来自)输入字段中输入的年份开始,并以年份结束您在(到)输入字段中输入),
但是当我在 for 循环中用(years+=1)替换(years++) 时,我得到无限循环并且浏览器停止工作!
我也试过(年=年+1),也得到和上面一样的结果;
我搜索了一个答案,但没有找到让我可以理解的东西,
提前致谢。
var fromInput = document.getElementById("fromInput"),
toInput = document.getElementById("toInput"),
startY,
endY;
function generateYears(start, end) {
"use strict";
var years;
document.write("<select>");
for (years = start; years <= end; years++) {
document.write("<option value= '" + years + "' >" + years + "<option>");
}
document.write("</select>");
}
function genYe() {
"use strict";
startY = fromInput.value;
endY = toInput.value;
generateYears(startY, endY);
}Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="years selector">
<title>years selector</title>
</head>
<body>
from <input id="fromInput" value=""><br>
to <input id="toInput" value=""><br><br>
<button onclick="genYe()">generate years</button>
<script src="mainscript.js"></script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
该+运算符用于字符串连接和加法,具体取决于其操作数的数据类型。当您切换到+=or+您正在执行string concatenation,而不是加法时,因为(and )的值是 stringstartyear。该<运营商将字典顺序比较两个字符串。虽然看起来值变得“更大”,但字符串的第一个字符永远不会改变,因此条件永远不会为真。
var start = '1'
var end = '3'
var year = start;
console.log(typeof year, year, year < end);
console.log(typeof year, year += 1, year < end);
console.log(typeof year, year += 1, year < end);Run Code Online (Sandbox Code Playgroud)
++另一方面,运算符总是将操作数转换为数字:
var start = '1'
var end = '3'
var year = start;
console.log(typeof year, year, year < end);
year++;
console.log(typeof year, year, year < end);
year++;
console.log(typeof year, year, year < end);Run Code Online (Sandbox Code Playgroud)
您可以解决首先将您的值转换为数字的问题:
function genYe() {
"use strict";
startY = Number(fromInput.value);
endY = Number(toInput.value);
generateYears(startY, endY);
}
Run Code Online (Sandbox Code Playgroud)