Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№102-03-2009 19:02:03

alex_past
Чайник
 
Группа: Members
Откуда: 14-ый рукав Млечного Пути
Зарегистрирован: 02-03-2009
Сообщений: 33
UA: Foxware 0.0

Сравнение строк

Извините, я что-то сегодня ничего не соображаю :(
Подскажите, пожалуйста, почему такой код:

Выделить код

Код:

var z1=new String("a");
var z2=new String("a");
alert(z1==z2);

В firefox 3.0.6 выводит "false"?

Отсутствует

 

№202-03-2009 19:13:08

ПротопопулуS
2,4716 THz на каждое из 64-х ядер...
 
Группа: Members
Откуда: Местное я
Зарегистрирован: 16-12-2008
Сообщений: 1515
UA: Firefox 3.1

Re: Сравнение строк

Объекты-то разные каждый раз создаются!!! Каждый вызов процедуры "new"
создает свой объект строкового типа и адресация у объектов разная и объекты
сами хоть и принадлежат к классу строк, но идентифицируются как разные.


Продам: совесть, ответственность, вежливость, воспитанность. Недорого.

Отсутствует

 

№302-03-2009 19:17:15

alex_past
Чайник
 
Группа: Members
Откуда: 14-ый рукав Млечного Пути
Зарегистрирован: 02-03-2009
Сообщений: 33
UA: Foxware 0.0

Re: Сравнение строк

Что-то я совсем туплю сегодня в самом деле. Ну разумеется, объекты разные. Но здесь ведь "==" должен значения строк сравнивать? Значения ведь у них одинаковые?
Как же мне тогда сравнить две строки?

Отсутствует

 

№402-03-2009 19:21:36

ПротопопулуS
2,4716 THz на каждое из 64-х ядер...
 
Группа: Members
Откуда: Местное я
Зарегистрирован: 16-12-2008
Сообщений: 1515
UA: Firefox 3.1

Re: Сравнение строк

Прежде всего z1 и z2 это переменные-объекты у которых есть свои
свойства, атрибуты и методы. Сравнивая два разных объекта получите
false. Как у Вас в Java(Script) я не совсем знаю, ибо сам "делфист",
но по-моему тут будет уместно (а может и нет) сделать так:

alert(z1.value==z2.value);

Но результат не гарантирую... :P


Продам: совесть, ответственность, вежливость, воспитанность. Недорого.

Отсутствует

 

№502-03-2009 19:25:01

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: Сравнение строк

alex_past пишет

Как же мне тогда сравнить две строки?

Бывают объекты, а бывают примитивные значения.

Выделить код

Код:

alert(typeof new String("a"));
alert(typeof "a");
alert(typeof (new String("a").valueOf()));

Неплохая статья на тему


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№602-03-2009 19:26:13

alex_past
Чайник
 
Группа: Members
Откуда: 14-ый рукав Млечного Пути
Зарегистрирован: 02-03-2009
Сообщений: 33
UA: Foxware 0.0

Re: Сравнение строк

ПротопопулуS: Нет, спасибо, конечно, но непроханже :( Такая запись выведет true при любых значениях.

Отредактировано alex_past (02-03-2009 19:27:20)

Отсутствует

 

№702-03-2009 19:26:57

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: Сравнение строк

Вообще, пользы от

Выделить код

Код:

var a = new String("a");

обычно никакой.
Что мешает сделать

Выделить код

Код:

var a = "a";

?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№802-03-2009 19:30:26

alex_past
Чайник
 
Группа: Members
Откуда: 14-ый рукав Млечного Пути
Зарегистрирован: 02-03-2009
Сообщений: 33
UA: Foxware 0.0

Re: Сравнение строк

Infocatcher: Спасибо, пойду читать.
Просто нужно чужой код поправить, а там было объявление через new.
Вообще говоря, странно. z=new String("a"); alert(z) ведь без проблем выведет примитивное значение...

Отредактировано alex_past (02-03-2009 19:30:43)

Отсутствует

 

№902-03-2009 19:36:36

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: Сравнение строк

alex_past пишет

Вообще говоря, странно. z=new String("a"); alert(z) ведь без проблем выведет примитивное значение...

При выполнении alert происходит преобразование типов.
Как и при, например

Выделить код

Код:

alert(typeof (0 + "a"));

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1002-03-2009 19:38:43

alex_past
Чайник
 
Группа: Members
Откуда: 14-ый рукав Млечного Пути
Зарегистрирован: 02-03-2009
Сообщений: 33
UA: Foxware 0.0

Re: Сравнение строк

Да, это я понимаю.
А "==" в моём куске кода, выходит, сравнивает адреса строковых объектов вместо их примитивных значений? Жуть какая... :( А я, балбес, был уверен, что он как раз valueOf-ы сравнивать должен.
Спасибо!

Отредактировано alex_past (02-03-2009 20:12:10)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]