NEWLINE2 == NEWLINE (false)
NL == NEWLINE (false)
Выражение, сравнивающее Объекты, истинно, только если операнды ссылаются на один и тот же Объект. ср c
Это не так: это два отдельных объекта, даже если их начальные значения одинаковы, поэтому результат равен false
.
Редактировать: Если вы хотите сравнить значения , а не идентификатор двух буферов, вы можете использовать Buffer.compare . Buffer.compare(NEWLINE2, NEWLINE) === 0
означает, что оба они равны.
nl == newline (true)
Две строки строго равны, если они имеют одинаковую последовательность символов, одинаковую длину и одинаковые символы в соответствующих позициях. sr c
Строки равны, поэтому true
.
NL == NL (true)
NEWLINE == NEWLINE (true)
Выражение, сравнивающее Objects, истинно, только если операнды ссылаются на один и тот же объект. ср c
nl == NL (true)
newline == NEWLINE (true)
nl == NEWLINE (true)
newline == NL (true)
Здесь происходит сравнение двух разных типов. Один - строка, другой - объект.
Каждый из этих операторов будет приводить свои операнды к примитивам перед выполнением сравнения. Если оба заканчиваются как строки, они сравниваются с использованием лексикографического порядка c, в противном случае они приводятся к числам для сравнения. Сравнение с NaN всегда даст ложь. sr c
Buffer
имеет метод toString
, поэтому он вызывается для того, чтобы иметь одинаковые примитивные типы с обеих сторон ==. Результатом этого метода является строка, содержащая \n
. '\n' == '\n'
равно true
.
В качестве отступления, если ваше сравнение было NEWLINE == 0
, то это произойдет:
' 1 ' == 1
равно true. При приведении пробелов отбрасывается, поэтому ' 1 '
будет приведен к числу со значением 1. Результирующее сравнение будет 1 == 1
.
Строка только из пробельных символов будет приведена к 0
. Буфер сначала преобразуется в строку, а затем в целое число, так что это должно произойти: 0 == 0
, поэтому результат будет true
.
NL.toString() == NEWLINE.toString() (true)
Две строки строго равны, если они имеют одинаковую последовательность символов, одинаковую длину и одинаковые символы в соответствующих позициях. ср c
Строки равны, поэтому true
.
NL ==+ NEWLINE (true)
NL ==- NEWLINE (true)
Это то же самое, что и == +NEWLINE
. Вы используете унарный +
или -
для явного приведения к числу. Здесь интересно то, что вы делаете эти сравнения после приведения: 0 == +0
и 0 == -0
. Отрицательный и положительный ноль считаются равными .
Ни одно из действий здесь не является «неопределенным».
Кроме «да, это здорово», на самом деле очень небольшая причина не использовать оператор строгого равенства (===
), который бы не приводил вещи в одинаковые примитивы.
Что касается вашего вопроса:
Новая строка в файл (\n
) совпадает с символом новой строки в самонабираемой строке ('\ n'). Они оба ASCII или Unicode-символ 0x0A, в байтовом выражении.
Некоторые документы содержат как символ новой строки, так и возврат каретки. Новая строка тогда состоит из двух символов: 0x0D 0x0A
(или \r\n
).