Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   сравнение строк (по стандарту) (https://javascript.ru/forum/misc/2670-sravnenie-strok-po-standartu.html)

x-yuri 30.01.2009 06:38

сравнение строк (по стандарту)
 
либо я не правильно понял что в ECMA-262 3rd edition написано, либо у них противоречие (11.9.3)
Цитата:

The equality operator is not always transitive. For example, there might be two distinct String objects, each representing the same string value; each String object would be considered equal to the string value by the == operator, but the two String objects would not be equal to each other.
но по алгоритму из того же пункта == должен транзитивным, по-крайней мере для строк

Андрей Параничев 30.01.2009 16:08

Хм, это наверно про следующее имеется в виду:
var a = new String("some");
var b = new String("some");
alert(a == b); // false

x-yuri 30.01.2009 16:21

хм, про new не подумал. Думал что функции Number, Boolean и т.д. делают то же самое, что и соответствующие конструкторы. Пасибо

Андрей Параничев 30.01.2009 17:05

Простой вызов приводит параметр к соответствующему типу.

Dmitry A. Soshnikov 30.01.2009 18:17

Цитата:

Сообщение от Андрей Параничев
Простой вызов приводит параметр к соответствующему типу.

Зависит от конструктора (например, new Boolean / просто Boolean - один и тот же эффект). Но, в основном, да - с new - создает новый объект, без new - получает привитив.

x-yuri 30.01.2009 18:28

Цитата:

Зависит от конструктора (например, new Boolean / просто Boolean - один и тот же эффект). Но, в основном, да - с new - создает новый объект, без new - получает привитив.
минутку, Boolean не создает объект

Андрей Параничев 30.01.2009 21:07

x-yuri,
Он об этом и говорит, собственно.

Dmitry A. Soshnikov 30.01.2009 21:27

Вызов как функция:

Function - http://javascript.ru/ecma/part15#a-15.3.1
Array - http://javascript.ru/ecma/part15#a-15.4.1
Object - http://javascript.ru/ecma/part15#a-15.2.1
Boolean - http://javascript.ru/ecma/part15#a-15.6.1
Date - http://javascript.ru/ecma/part15#a-15.9.2
Error - http://javascript.ru/ecma/part15#a-15.11.1

P.S.> кстати, насчет Boolean, я "наврал" (вернее, перепутал). Но, просто хотел показать такие случаи (например, как с Array: new Array / просто Array - эффект один - создание объекта "массив")

Цитата:

Сообщение от x-yuri
минутку, Boolean не создает объект

new Boolean(param) - новый объект, Boolean(param) - преобразование типа к примитиву.

alert([typeof Boolean(true), typeof new Boolean(true)]); // boolean, object


Часовой пояс GMT +3, время: 22:13.