如何在JavaScript中相互比较两种相同的类型?
所以a == b
应该返回 true ,因为它们都是arrays
。
因此变量的内容无关紧要。比较应该是这样的;
var a = [];
var b = [];
var c = "this is a string";
var d = "this is also a string";
if(a type == b type) // true because both arrays
if(c type == d type) // true because both strings
if(a type == d type) // false because not the same type (string) or (array)
答案 0 :(得分:1)
a
和b
并不完全相同。如果类型是引用类型,则比较它们只检查它们的引用。在这种情况下,a
和b
是数组,但它们在内存中有单独的对象,并且对它们有单独的引用。
当您将a
分配给c
时,它只会复制a
的引用并将其分配给c
。现在,c
也指向与a
相同的对象。因此,虽然比较a
和c
会返回true,因为它们具有相同的参考值(内存的地址)。
像这样的东西。 ([]
中的数字是内存的地址,()
中的数字是值)
a(0x1616) ---------> [0x1616] <--|
b(0x1717) ---------> [0x1717] |
c = a; |
c(0x1616) -----------------------|
答案 1 :(得分:1)
[]
是Javascript Array
类型对象。
==
首先输入检查。
当您执行a == b
时虽然它们都是数组,但它们是不同的array
对象,因为它们具有不同的值和引用。因此它变为false
分配c = a
时。它将a
数组的引用称为c
。
array object
。所以a == c
变为现实。
答案 2 :(得分:1)
要比较javascript中的两种类型,请使用typeof。
(function () {
var a = [];
var b = [];
var c = a;
var d = "a";
var e = "a";
console.log(typeof(a) == typeof(b));
console.log(typeof(a) == typeof(c));
console.log(typeof(d) == typeof(e));
})();
答案 3 :(得分:0)
如果两个操作数都是对象,则当操作数引用内存中的不同对象时,JavaScript会比较不相等的内部引用。
变量 a 和 b 是指两个具有相同属性的对象,但它们都是不同的实例。另一方面, a 和 c 都指向同一个实例。
原因是内部JavaScript实际上有两种不同的方法来测试相等性。字符串和数字等原语按其值进行比较,而数组,日期和普通对象等对象则按其引用进行比较。通过引用进行的比较基本上检查给定的对象是否指向内存中的相同位置。
请参阅下面的代码片段,了解Javascript中对象的比较。
(function () {
var a = [];
var b = [];
var c = a;
var d = "a";
var e = "a";
console.log(a == b);
console.log(a == c);
console.log(d == e);
})();