Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > === что это и для чего оно нужно?


Автор: t77 20.4.2009, 09:50
Доброе время суток.
Недавно, разбирая код, наткнулся на то, что раньше не видел...
А именно то, что в условии if, сравнение 2-ух значений с помощью ===.
Код

if(x === y)
{
   ...
}

Так вот, что это за сравнение и чем собственно оно отличается от сравнения == ?
Объясните мне пожалуйста на простом русском языке, что означает === ?
Зачем оно нужно если можно просто использовать typeof ?
Существует ли подобное в других языках программирования ?

Автор: ksnk 20.4.2009, 10:13
t77, Это "равно, и такого-же типа".

Наиболее выразительный пример - из документации по strpos
Код

$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
   echo "The string '$findme' was not found in the string '$mystring'";
} else {
   echo "The string '$findme' was found in the string '$mystring'";
   echo " and exists at position $pos";
}


своими словами, из за "автоматического приведения" такие конструкции 0==false ''==false 0=='' всегда выдают истину. Чтобы не писать проверку по типам, считается более правильным придумать новую операцию.

Такое есть еще и в JavaScript, вероятно и в других языках без явного контроля типов.

Автор: t77 20.4.2009, 10:25
То что такое есть и в PHP я понял...
А вот объяснение
Цитата

Чтобы не писать проверку по типам, считается более правильным придумать новую операцию.

несовсем...
Получается что сравнение по типам идентично === ?
И еще если можно пример на JavaScript...
Спасибо.

Автор: underW 20.4.2009, 11:19
Код

var s="57"; //тип string-строка
var n=57;   // тип number-число
if(s==n){alert('yes')} else {alert("no")} // выведет yes
if(s===n){alert('yes')} else {alert("no")} // выведет no



=== идентично сравнению по значению и по типу.

Автор: Aliance 20.4.2009, 12:10
Цитата(t77 @  20.4.2009,  11:25 Найти цитируемый пост)
Получается что сравнение по типам идентично === ?

не совсем. оператор === сравнивает не только по типу, но в первую очередь по значению.
Код

alert( 69 === 100 );

Выдаст false.

Можно сказать, что === представляет собой следующую функцию:
Код

function strictEqual( a, b )
{
    return ( a == b && typeof a == typeof b ) ? true : false;
}

Автор: t77 20.4.2009, 13:05
Очень хорошие и ясные объяснения. smile 
Теперь все ясно!
Спасибо большое.

Автор: Aliance 20.4.2009, 13:15
Напоминание на будущее: если вопрос решен, справа вверху есть ссылка "Пометить как решённый" - следует не забывать ею пользоваться ;)

Автор: t77 20.4.2009, 13:20
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)