Javascript.RU

Операторы сравнения

Описание, примеры

Операндами операторов сравнения могут быть численные и строковые значения. Строки сравниваются, исходя из стандартного лексикографического порядка при использовании Unicode.

Яваскрипт допускает как строгое сравнение, так и сравнение с приведением типов. Для строгого сравнения оба операнда должны иметь одинаковый тип и:

  • Две строки строго равны, если состоят из одинаковой последовательности символов
  • Два числа строго равны, если равны в обычном смысле слова. +0 строго равен -0.
  • NaN строго не равно ничему, включая NaN
  • Два булевых операнда строго равны, если они оба true или false
  • Два операнда-объекта строго равны, если являются ссылками на один и тот же общий объект
  • Null и Undefined равны ==, но не строго равны ===

Следующая таблица описывает операторы сравнения:

Оператор Описание Примеры, возвращающие true при var1=3, var2=4
Равно (==) Если два операнда не одного типа, javascript преобразовывает типы и сравнивает строго. Если какой-либо операнд - число или булево значение, то операнды преобразуются в числа; если какой-либо операнд строка - второй преобразуются в строку

3 == var1
"3" == var1
3 == '3'

Не равно (!=) Возвращает true, если операнды не равны. Если операнды имеют разный тип, javascript преобразовывает.

var1 != 4
var1 != "5"

Строго равно (===) Возвращает true, если операнды строго равны (см. выше), без преобразования типов.

3 === var1

Строго не равно (!==) Возвращает true, если операнды не являются строго равными (см. выше) или имеют разные типы.

var2 !== 3
3 !== '3'

Больше (>) Возвращает true, если левый операнд больше правого.

var2 > var1

Больше или равно (>=) Возвращает true, если левый операнд больше правого или равен ему.

var2 >= var1
var1 >= 3

Меньше (<) Возвращает true, если левый операнд меньше правого.

var1 < var2

Меньше или равно (<=) Возвращает true, если левый операнд меньше правого или равен ему.

var1 <= var2
var2 <= 5

Использование операторов сравнения

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

При конвертации типов яваскрипт преобразует String, Number, Boolean и Object следующим образом:

  • При сравнении числа и строки, строка преобразуется в числовое значение. Яваскрипт при этом получает значение числа из строкового литерала: "123" == 123.
  • Если один из операндов - булевый, то он преобразуется к 1, если он true и к +0, если он false
  • Если объект сравнивается с числом или строкой, яваскрипт пытается получить соответствующее значение для объекта. Он преобразует объект к элементарному значению, строке или числу, используя методы valueOf и toString. Если преобразовать объект не удается - генерируется ошибка выполнения.

См. также


Автор: Гость (не зарегистрирован), дата: 28 сентября, 2010 - 16:13
#permalink

Почему

null == 0 // false

?


Автор: Илья Кантор, дата: 2 октября, 2010 - 11:05
#permalink

Так прописано в стандарте, жесткий хардкод.. Видимо, имели в виду что Null это отсутствие объекта.., 0 - число.


Автор: solomon243 (не зарегистрирован), дата: 15 ноября, 2010 - 23:24
#permalink

И не только в JavaScript


Автор: Гость (не зарегистрирован), дата: 28 февраля, 2016 - 10:54
#permalink

IMHO null - объект, который не может быть приведён к простому типу, т.к. не имеет valueOf() или toString()


Автор: При3 (не зарегистрирован), дата: 3 ноября, 2010 - 20:14
#permalink
if (0=>h1>=5000) {document.write("<center><b>Вы убили слепого пса</b><br><img src=http://stalker-epos.com/zp/mutants/epos-zp-slepoy_dog.jpg></center>")}
if (5000=>h1>=9900) {document.write("<center><b>Вы убили псевдособаку</b><br><img src=http://stalker-epos.com/zp/mutants/epos-zp-pseudodog.jpg></center>")}

Где ошибка? Почему не работает?! Так вообще можно ставить y=>h1>=x ??


Автор: denya (не зарегистрирован), дата: 24 декабря, 2010 - 02:52
#permalink

Нет, нельзя. Правильно так:

if (0 <= h1 && h1 <= 5000){}

Автор: Гость (не зарегистрирован), дата: 2 июля, 2015 - 11:59
#permalink

if (0=>h1>=5000) - будет ошибка, потому что нельзя путать местами '=' и '>'
Сначала знак неравенства, затем равно, и ни в коем случае не наоборот.


Автор: Erika (не зарегистрирован), дата: 12 февраля, 2012 - 03:13
#permalink

Увидела вопрос почему null==0 false
В пример php код

<?php
$image=null;
if(file_exists($dir.'/'.$image) && preg_match('#\.png$|\.jpg$|\.jpeg$|\.gif$#i',basename($image)))//Проверяем наличие изображения переданого переменной в указаной папке. При этом формат изображения (preg_match(); должен соотведствовать шаблону. Регистр (#i) не имеет значения)
$image="<img src=\"".$dir."/".$image."\" />";
echo $image;//Если изображение имеется на сервере - оно будет показано. Нет - строчка останется пустой
?>

Если бы в начале кода было указано
$image=0;
То вывело бы нолик, а так все как доХтор прописал
Могу для примера и на жабе чет настропать но, оно аналогично...


Автор: Erika (не зарегистрирован), дата: 12 февраля, 2012 - 03:21
#permalink

Можно ещё и так

$image=false;
//Проверяем изображение (Выше писала уж0)
if($image!=false)
echo $image;
else
print_r("Украли картинку уж0\r\n");
//Или так
//Код проверки
if(isset($image))
echo $image;
elseif(!isset($image))
print_r( "Нет такого изображения\r\n");

Автор: iyntx, дата: 30 марта, 2012 - 13:38
#permalink

null в PHP и JS:

В PHP

<?
var_dump((null == true)); // bool(false)
var_dump((null == false)); //вернёт bool(true)
?>

в JS

<script>
null == false  //вернёт false
null == true  //вернёт false
</script>

-------
в js для проверки на null , думаю, лучше всего юзать отрицание "!"

<script>
!null //вернёт true

!'я строка'  //вернёт false
!['я','массив'] //вернёт false
!{я:'объект'} //вернёт false
</script>

Автор: Гость (не зарегистрирован), дата: 2 июля, 2015 - 12:09
#permalink

Проверить на null используя отрицание???

!null //вернёт true
!NaN //вернёт true
!undefined //вернёт true
!false //вернёт true
!0 //вернёт true

а null с null проверить слабо?

null===null //вернёт true

Автор: Гость (не зарегистрирован), дата: 31 марта, 2012 - 01:32
#permalink

Вопрос про условия:

if(A>=100) {var B = 10;};
if(A<100) {var B = 5};

if(C>=50) {var D = 20;};
if(C<50) {var D = 50};

var E = B+D;

Значения A и C вводятся в поле вручную. Как сложить B и D? Почему этот код не работает? Пишет условие B не найдено.


Автор: Гость (не зарегистрирован), дата: 20 апреля, 2012 - 06:56
#permalink

Проблема в области видимости переменной B, она видна только в теле оператора IF

var A,B,C,D,E;
A=100;
C=40
if(A>=100) {
B = 10;
}else{
B = 5;
} 
if(C>=50) {
D = 20;
}else{
D = 50;
}
 
E = B+D;

Автор: Гость (не зарегистрирован), дата: 9 марта, 2016 - 17:26
#permalink

> Проблема в области видимости переменной B,
> она видна только в теле оператора IF
... ничего подобного, в JS области видимости подразделяются на "глобальную" и "область видимости функции". Фигурные скобки не образуют отдельную область видимости.
Проблема кода в том, что строчки

1. if(A>=100) {var B = 10;};
2. if(A<100) {var B = 5};

не выполняются т.к. в них не определена переменная А
перепишите код следующим образом:

var A = 20;
if(A >= 100) {var B = 10; };
if(A < 100)  {var B = 5; };

и он выполнится, тестил в таком варианте, работает:

<script type="text/javascript">
<!--
var A = 20;
if(A >= 100) {var B = 10; };
if(A < 100)  {var B = 5; };
document.writeln(B + " <br />");
-->
</script>

Автор: макxxxx (не зарегистрирован), дата: 7 января, 2013 - 22:22
#permalink

"Для строгого сравнения оба операнда должны иметь одинаковый тип и:"

Буква "и" не лишняя?


Автор: макxxxx (не зарегистрирован), дата: 7 января, 2013 - 22:50
#permalink

"Стандартные операторы равенства (== и !=) сравнивают два операнда безотносительно их типа."
Может быть уместнее употребить операторы сравнения?


Автор: ВиталийАТ (не зарегистрирован), дата: 3 декабря, 2013 - 07:51
#permalink

Как сравнить адрес строки URL?


Автор: Dmitry_kh, дата: 9 апреля, 2015 - 16:15
#permalink
null == 0 //false
null > 0  //false
null >= 0 //true

Что это, мать их, за извращенство?!!!


Автор: Гость (не зарегистрирован), дата: 2 июня, 2015 - 16:10
#permalink

Это волшебный мир JavaScripta! Улыбайтесь! ))


Автор: Гость (не зарегистрирован), дата: 28 февраля, 2016 - 11:19
#permalink

null - объект, который не может быть приведён к простому типу, т.к. не имеет valueOf() или toString(), по-этому любое сравнение числовых даёт false
отсюда:
null > 0 // => false
null < 0 // => false
Операторы <= (меньше или равно) и >= (больше или равно) для определения «равенства» двух значений не используют операторы равенства или идентичности. Оператор «меньше или равно» определяется просто как «не больше », а оператор «больше или равно» – как «не меньше».
(x >= y) -> !(x < y), а (x <= y) -> !(x > y) т.к. логика операторов ">" и "<" отличается от "==" или "==="


Автор: WearponiX (не зарегистрирован), дата: 12 августа, 2015 - 13:09
#permalink

Где ошибка? Ввожу 2 и 123456 а код пишет что 2 больше.

<script language="JavaScript">
window.onclick = min;
var a=""; b="";
function min(a,b){
alert("Enter two numbers.");
a = prompt('Number one:', 0);
b = prompt('Number two:', 0);
if (b<a){
alert("Number "+a+" is bigger.");
}
else if (b>a){
alert("Number "+b+" is bigger.");
}
else if (a==b){
alert("Numbers "+a+" and "+b+" are similar.");
};
}</script>

Автор: Гость (не зарегистрирован), дата: 12 августа, 2015 - 19:04
#permalink

У тебя сравниваются не числа, а строки. попробуй поменять вот так
a = parseInt(prompt('Number one:', 0),10);
b = parseInt(prompt('Number two:', 0),10);


Автор: jonnyVy (не зарегистрирован), дата: 5 октября, 2015 - 09:51
#permalink

Почему этот код

var a = 2>1>0;
console.log(a);

выводит true, а вот этот

var a = 3>2>1>0;
console.log(a);

выводит false?


Автор: may42, дата: 10 октября, 2015 - 23:47
#permalink

js видит "3>2>1" как последовательность:
"значение оператор значение оператор значение"
У всех трёх операторов ">" приоритет исполнения 11, значит, они будут исполняться друг за другом слева-направо.

Ход исполнения для первого фрагмента по шагам:
первый (левый) оператор: 2>1; //получаем true
второй (правый) оператор: true>0; //преобразуем к 1>0 получаем true
ответ true

Ход исполнения для второго фрагмента по шагам:
первый оператор: 3>2; //получаем true
второй оператор: true>1; //преобразуем к 1>1 получаем false
третий оператор: false>0; //преобразуем к 0>0 получаем false
ответ false


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
6 + 1 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum