Текстовая категоризация с использованием Apache OpenNLP

Оператор идентичности (===) ведет себя идентично оператору равенства (==), за исключением того, что преобразование типа не выполняется, и типы должны быть одинаковыми, чтобы считаться равными.

Ссылка: Javascript Tutorial: Операторы сравнения

Оператор == будет сравнивать для равенства после выполнения любых необходимых преобразований типа . Оператор === не будет выполнять преобразование, поэтому, если два значения не совпадают, === просто вернет false.

Чтобы проголосовать за отличный Douglas Crockford: Хорошие части ,

JavaScript имеет два набора операторов равенства: === и !==, и их злых близнецов == и !=. Хорошие работают так, как вы ожидали. Если два операнда одного типа и имеют одинаковое значение, то === создает true, а !== производит false. Злые близнецы поступают правильно, когда операнды одного типа, но если они имеют разные типы, они пытаются принудить ценности. правила, с помощью которых они делают, которые являются сложными и непреодолимыми. Вот некоторые из интересных случаев:

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

Отсутствие транзитивности вызывает тревогу. Мой совет - никогда не использовать злых близнецов. Вместо этого всегда используйте === и !==. Все показанные сравнения производят false с помощью оператора ===.


Обновление:

Хорошая точка была поднята @Casebash в комментариях и в @Phillipe Laybaert's ответ относительно ссылочных типов. Для ссылочных типов == и === действуют последовательно друг с другом (за исключением специального случая).

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "text";
var f = "te" + "xt";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

Частным случаем является сравнение литерала с объектом, который оценивает тот же буквально, из-за его метода toString или valueOf. Например, рассмотрим сравнение строкового литерала со строковым объектом, созданным конструктором String.

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

Здесь оператор == проверяет значения двух объектов и возвращает true ], но === видит, что они не одного типа и возвращают false. Какой из них правильный? Это действительно зависит от того, что вы пытаетесь сравнить. Мой совет состоит в том, чтобы полностью обходить вопрос и просто не использовать конструктор String для создания строковых объектов.

Ссылка http://www.ecma-international.org/ecma-262 /5.1/#sec-11.9.3

0
задан shubham jain 24 March 2019 в 06:03
поделиться