Python部分SO can you have two different instances of (say) a string of "Bob" and
have them not return true when compared using 'is'? Or is it infact
the same as ===?a = "Bob"
b = "{}".format("Bob")
print a, b
print a is b, a == b
输出Bob Bob
False True
另一个例子print 3 is 2+1
print 300 is 200+100
输出True
False
这是因为Python中的小int(-5到256)是在内部缓存的。因此,无论何时在程序中使用它们,都会使用缓存的整数。因此,is将为它们返回True。但是如果我们选择更大的数字,就像在第二个例子中,(300 is 200+100)则不是真的,因为它们没有被缓存。
结论:
只有当被比较的对象是相同的对象时,is才会返回True,这意味着它们指向内存中的相同位置。(它完全依赖于python实现来缓存/实习生对象。在这种情况下,is将返回True)
经验法则:
切勿使用is运算符检查两个对象是否具有相同的值。
JavaScript部分
问题的另一部分是关于===运算符。让我们看看这个操作符是如何工作的。If Type(x) is different from Type(y), return false.
If Type(x) is Undefined, return true.
If Type(x) is Null, return true.
If Type(x) is Number, then
If x is NaN, return false.
If y is NaN, return false.
If x is the same Number value as y, return true.
If x is +0 and y is −0, return true.
If x is −0 and y is +0, return true.
Return false.
If Type(x) is String, then return true if x and y are exactly the
same sequence of characters (same length and same characters in
corresponding positions); otherwise, return false.
If Type(x) is Boolean, return true if x and y are both true or both
false; otherwise, return false.
Return true if x and y refer to the same object. Otherwise, return
false.
最后结论
我们不能比较Python的is运算符和JavaScript的===运算符,因为Python的is运算符只做严格相等比较算法中的最后一项。7. Return true if x and y refer to the same object. Otherwise, return false.