三元运算符如何比较JavaScript中的字符和数字?
How does the ternary operator compares characters and numbers in JavaScript?
我必须在数组中找到最大值,所以我编写了一个用于循环的函数,同时还使用了三元运算符,我注意到只要反转循环的方向就会改变输出,而且如果我使用 if-,输出也会不同别的。此外,更改 'a' 在数组中的位置也会更改输出。
const array2 = ['a', 3, 4, 2];
function biggestNumberInArray(arr) {
let max=0;
for (let i = 0; i < arr.length; i++) {
max = max>arr[i]?max:arr[i];
}
return max;
}
function biggestNumberInArray2(arr) {
let max=0;
for (let i = arr.length - 1; i >= 0; i--) {
max = max>arr[i]?max:arr[i];
}
return max;
}
console.log(biggestNumberInArray(array2));
console.log(biggestNumberInArray2(array2));
当运行第一个函数输出为4
当运行第二个函数输出为'a'
如果您单步执行调试器并查看比较...您会发现将 'a' 与 any 数字进行比较总是 错误。
这就是为什么它似乎 "work" 朝一个方向,而不是另一个方向。
具体来说:
When comparing a string with a number, JavaScript will convert the
string to a number when doing the comparison. An empty string converts
to 0. A non-numeric string converts to NaN which is always false .
When comparing two strings, "2" will be greater than "12", because
(alphabetically) 1 is less than 2.
因为字符串'a'
和整数2,3,4
没有可比性。因此它总是 returns false
在你的第一个函数中,它 returns 4
因为 'a'
首先比较 returns false
,然后 max
被赋值3
在第二个函数中 returns 'a'
因为 'a'
最后比较。
您可以使用 Number()
或 parseInt()
检查字符串是否可以转换为数字
const arr = ['a', 3, 4, 2];
function biggestNumberInArray2(arr) {
let max=0;
for (let i = arr.length - 1; i >= 0; i--) {
const comparable = Number(arr[i]) || -99
max = max > comparable ? max : comparable;
}
return max;
}
console.log(biggestNumberInArray2(arr))
我必须在数组中找到最大值,所以我编写了一个用于循环的函数,同时还使用了三元运算符,我注意到只要反转循环的方向就会改变输出,而且如果我使用 if-,输出也会不同别的。此外,更改 'a' 在数组中的位置也会更改输出。
const array2 = ['a', 3, 4, 2];
function biggestNumberInArray(arr) {
let max=0;
for (let i = 0; i < arr.length; i++) {
max = max>arr[i]?max:arr[i];
}
return max;
}
function biggestNumberInArray2(arr) {
let max=0;
for (let i = arr.length - 1; i >= 0; i--) {
max = max>arr[i]?max:arr[i];
}
return max;
}
console.log(biggestNumberInArray(array2));
console.log(biggestNumberInArray2(array2));
当运行第一个函数输出为4
当运行第二个函数输出为'a'
如果您单步执行调试器并查看比较...您会发现将 'a' 与 any 数字进行比较总是 错误。
这就是为什么它似乎 "work" 朝一个方向,而不是另一个方向。
具体来说:
When comparing a string with a number, JavaScript will convert the string to a number when doing the comparison. An empty string converts to 0. A non-numeric string converts to NaN which is always false . When comparing two strings, "2" will be greater than "12", because (alphabetically) 1 is less than 2.
因为字符串'a'
和整数2,3,4
没有可比性。因此它总是 returns false
在你的第一个函数中,它 returns 4
因为 'a'
首先比较 returns false
,然后 max
被赋值3
在第二个函数中 returns 'a'
因为 'a'
最后比较。
您可以使用 Number()
或 parseInt()
const arr = ['a', 3, 4, 2];
function biggestNumberInArray2(arr) {
let max=0;
for (let i = arr.length - 1; i >= 0; i--) {
const comparable = Number(arr[i]) || -99
max = max > comparable ? max : comparable;
}
return max;
}
console.log(biggestNumberInArray2(arr))