Часть Python
Итак, у вас есть два разных экземпляра (скажем) строки «Боб» и не возвращать ли они True при сравнении с «is»? Или это инфакт так же, как ===?
is
Вывод
is
Примечание. В большинстве реализаций Python время компиляции Строки интернированы .
Другой пример,
===
Вывод
is
Это связано с тем, что небольшие ints (от -5 до 256) в Python кэшируются внутри. Таким образом, всякий раз, когда они используются в программах, используются кешированные целые числа. Итак, is
вернется 7. Return true if x and y refer to the same object. Otherwise, return false.
для них. Но если мы выберем большие числа, как во втором примере, ( >>> a = 'foo' >>> b = 'bar' >>> a + b is 'foobar' False >>> 1000 + 1 is 1001 False
) это не так, потому что они НЕ кэшированы.
Вывод:
is
будет возвращаться True
только тогда, когда сравниваемые объекты являются одним и тем же объектом, что означает, что они указывают на одно и то же место в памяти. (Это зависит только от реализации python к кеш-объектам / стажерам. В этом случае is
вернется True
)
Практическое правило:
НИКОГДА не используйте is
оператор, чтобы проверить, имеют ли два объекта одинаковое значение.
Часть JavaScript
Другая часть вашего вопроса касается оператора ===. Посмотрим, как работает этот оператор.
Цитирование из спецификаций ECMA 5.1. Алгоритм сравнения строгого равенства определяется следующим образом:
- Если Type (x) отличается от Type (y), return ===.
- Если Type (x) Undefined, верните true.
- Если Type (x) - Null, верните true.
- Если Type (x) - Number, то
- Если x является NaN, верните false.
- Если y является NaN, верните false.
- Если x - это то же значение числа, что и y, верните true.
- Если x равно +0 и y равно? 0, верните true.
- Если x равно 0, а y равно +0, верните true.
- Вернуть false.
- Если Type (x) - String, то верните true, если x и y - это точно такая же последовательность символов (одинаковая длина и одинаковые символы в соответствующих позициях); в противном случае верните false.
- Если Type (x) является логическим, верните true, если x и y оба true или оба false; в противном случае верните false.
- Верните true, если x и y относятся к одному и тому же объекту. В противном случае верните false.
Окончательное заключение
Мы можем НЕ сравнивать Пайтон is
оператора и в JavaScript ===
оператор, так как в Python is
оператор делает только последний пункт в строгом равенстве Сравнения алгоритма.
>>> a = "Hello, World!!!"
>>> b = "Hello, World!!!"
>>> a is b
False