Ошибка в приведении типа Javascript

У меня есть эта странная ошибка с Javascript и принуждением типа (автоматическое преобразование типа переменных, сделанное Javacript). Вот код

console.log('23' < '3');

который находится внутри файла с именем index.js, который вызывается этим простым html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello World</h1>
    <script src="index.js"></script>
</body>
</html>

Что действительно странно, так это то, что эта операция возвращает true, а не false. Я провел несколько тестов и обнаружил, что эта операция '23 ‹ x' неверна для всех 2 ‹ x ‹ 10. Кто-нибудь знает, почему возникает эта ошибка?


person Stefano Carretti    schedule 09.01.2021    source источник
comment
Если оба значения являются строками, они сравниваются как строки на основе значений кодовых точек Unicode, которые они содержат — developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/   -  person Nick Parsons    schedule 10.01.2021
comment
Вы не должны никогда полагаться на приведение типов JS из-за довольно неинтуитивного поведения.   -  person SuperStormer    schedule 10.01.2021
comment
Спасибо за ответ. Я следил за лекцией по udemy, и пример был с двумя строковыми значениями. Кажется, мы нашли ошибку в лекции одного из самых цитируемых курсов udemy по javascript.   -  person Stefano Carretti    schedule 10.01.2021
comment
@SuperStormer: в коде нет приведения типов.   -  person dandavis    schedule 10.01.2021
comment
Я хочу, чтобы вы заметили, что приведение типов не применяется только для операторов + и ‹› между строками. Все остальные операции (-, /, *, ect...) вызывают приведение типов, даже если значения представляют собой 2 строки.   -  person Stefano Carretti    schedule 10.01.2021


Ответы (1)


это не ошибка, вы сравниваете две строки, и строка «23» меньше, чем строка «3». при сравнении строк сравнивается первый символ, если один меньше другого, сравнение прекращается.

2 меньше 3 также в таблице ASCII (https://www.asciitable.com/), так что результат ожидаем.

person GBra 4.669    schedule 09.01.2021