Операторы сравнения
Описание, примеры
Операндами операторов сравнения могут быть численные и строковые значения. Строки сравниваются, исходя из стандартного лексикографического порядка при использовании 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. Если преобразовать объект не удается - генерируется ошибка выполнения.
|
Почему
?
Так прописано в стандарте, жесткий хардкод.. Видимо, имели в виду что Null это отсутствие объекта.., 0 - число.
И не только в JavaScript
IMHO null - объект, который не может быть приведён к простому типу, т.к. не имеет valueOf() или toString()
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 ??
Нет, нельзя. Правильно так:
if (0 <= h1 && h1 <= 5000){}if (0=>h1>=5000) - будет ошибка, потому что нельзя путать местами '=' и '>'
Сначала знак неравенства, затем равно, и ни в коем случае не наоборот.
Увидела вопрос почему 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;
То вывело бы нолик, а так все как доХтор прописал
Могу для примера и на жабе чет настропать но, оно аналогично...
Можно ещё и так
$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");null в PHP и JS:
В PHP
в JS
-------
в js для проверки на null , думаю, лучше всего юзать отрицание "!"
<script> !null //вернёт true !'я строка' //вернёт false !['я','массив'] //вернёт false !{я:'объект'} //вернёт false </script>Проверить на null используя отрицание???
а null с null проверить слабо?
Вопрос про условия:
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 не найдено.
Проблема в области видимости переменной 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;> Проблема в области видимости переменной 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>"Для строгого сравнения оба операнда должны иметь одинаковый тип и:"
Буква "и" не лишняя?
"Стандартные операторы равенства (== и !=) сравнивают два операнда безотносительно их типа."
Может быть уместнее употребить операторы сравнения?
Как сравнить адрес строки URL?
Где ошибка? Ввожу 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>У тебя сравниваются не числа, а строки. попробуй поменять вот так
a = parseInt(prompt('Number one:', 0),10);
b = parseInt(prompt('Number two:', 0),10);
Почему этот код
выводит true, а вот этот
выводит false?
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