是'是' Python中的关键字与JS中的===关键字相同?

时间:2016-06-29 19:28:18

标签: javascript python comparison

我看到了这个问题here,现在我很好奇。与JS中的===符号相比,is运算符在python中的行为如何?

3 个答案:

答案 0 :(得分:7)

不,他们不一样。 Python中的is检查两个对象在Python中是否具有相同的id,即。即使在记忆中,它们也是一样的。您可以检查的是:

>>> a='foo'
>>> a is 'foo'
True
>>> id(a)
44434088
>>> id('foo')
44434088
>>> a=[1]
>>> a is [1]
False
>>> id(a)
45789792
>>> id([1])
4469824

答案 1 :(得分:2)

在Javascript中,==运算符会在比较相等性时执行隐式类型转换,因此,[] == ""将返回true===运算符用于在没有类型转换的情况下检查相等性([] === ""返回false。)

在Python中,is关键字检查引用相等性。因此,如果x is yx都指向内存中的同一对象,y将仅返回true。例如:

x = [1, 2, 3]
y = [1, 2, 3]
z = x
x is y # False
x is z # True

可能由此引起的一些问题是建议检查null x is NoneNone始终指向内存中的相同空间,因此如果x is None具有无值(True,则可以放心,x将始终返回False否则)。

您可能还会遇到一些怪癖,如下所示:

x = 1
y = 1
x is y # True

以上是CPython(您可能正在使用的Python解释器)中的非标准行为的结果,其中小程序在程序启动时全部分配给特定对象。您可以检查这不适用于较大的数字:

x = 1000
y = 1000
x is y # False

除非您正在检查None,或者您是否特别想确保两个变量指向内存中的相同位置,否则您应使用==代替is。< / p>

答案 2 :(得分:1)

没有。在JS中,is似乎比===更加更严格

在JS中:

  

对于值类型(数字):如果a和b具有,则a === b返回true   相同的值,属于同一类型

     

对于引用类型:如果a和b引用,则a === b返回true   完全相同的对象

     

对于字符串:如果a和b都是字符串,则a === b返回true   包含完全相同的字符

在Python中:

没有矛盾,除id(obj1)id(obj2)相同外,两个对象都不相同,obj1 is obj2将评估为False