【发布时间】:2015-11-03 17:31:26
【问题描述】:
这是我的第一个 JavaScript 项目,所以我确信这段代码并不漂亮,并且可以用更好的方式编写,但除此之外,我遇到了一个我不明白的问题。我确定这只是我自己制造的一个错误,但我就是找不到。
'>'(大于)运算符在超过 100 的数字上工作正常,但在达到 100 时停止工作。出于某种原因 100 > 99 返回 false?
https://jsbin.com/vigocu/edit?console,output
将滑块向右移动,然后缓慢向左移动,您会看到它返回“true”,直到达到 100。从那里返回“false”
function getSliderInput(inputSliderId) {
var backSwingArray = [100];
var downSwingArray = [];
document.querySelector('#' + inputSliderId).addEventListener('input', fillArray , false);
function fillArray() {
if (isNaN(downSwingArray[downSwingArray.length - 1]) && backSwingArray[backSwingArray.length - 1] < this.value) {
backSwingArray.push(this.value);
} else if (downSwingArray[downSwingArray.length - 1] > this.value || isNaN(downSwingArray[downSwingArray.length - 1])){
console.log('Is ' + downSwingArray[downSwingArray.length - 1] + ' > ' + this.value + ' return ' + (downSwingArray[downSwingArray.length - 1] > this.value));
downSwingArray.push(this.value);
} else {
console.log('Is ' + downSwingArray[downSwingArray.length - 1] + ' > ' + this.value + ' return ' + (downSwingArray[downSwingArray.length - 1] > this.value));
return;
}
}
}
【问题讨论】:
-
您确定要比较的值都是数字吗?这可能是类型不匹配问题——将字符串与数字进行比较。尝试将这两个值包装在 Number() 函数中,看看响应是否改变。
-
您的 JSBin 失败并显示
"ReferenceError: getSliderInput is not defined at onload (https://null.jsbin.com/runner:1:162) at https://static.jsbin.com/js/prod/runner-3.35.3.min.js:1:13627 at https://static.jsbin.com/js/prod/runner-3.35.3.min.js:1:10537"在任何情况下,应尽可能在现场使用 Stack Snippes(<>按钮)提供现场示例。 -
代替
this.value,使用parseInt(this.value, 10)确保值字符串被转换为数字! -
JSBin 不适合你们吗?我已经在几个浏览器中对其进行了测试,并且在这里运行良好。
-
@HenrikMadsen:Linux 上的 Chrome 46.0.2490.80 不适合我(见上文)。
标签: javascript