三元运算符如何比较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))