这似乎是一个非常基本的问题,但无法找到有关SO的任何解释。
考虑一下:
var arr = [1, 2, 3];
var str = "123";
function compare(){
return arr.join('').split('') === str.split('')
}
console.log(compare());
console.log(arr.join('').split(''))
console.log(str.split(''))

无法理解为什么控制台记录false
......?
答案 0 :(得分:4)
因为虽然您要比较的两个数组是等效,但它们不是相同的数组。带有对象的===
(和console.log(["1", "2", "3"] == ["1", "2", "3"]);
)会检查它们是否是相同的对象。
实际上,你拥有的是:
import { BaseEntity } from './../../../shared';
import { Empleado } from '../empleado.model';
export class ReporteEmpleadoMes {
constructor(
public mes?: string,
public empleadosAlta?: Array<Empleado>,
public empleadosBaja?: Array<Empleado>,
) {
this.empleadosAlta = new Array();
this.empleadosBaja = new Array();
}
}
答案 1 :(得分:2)
您比较两个对象的引用,而不是它们的内容。因为你有2个不同的对象,所以它们的引用不相等。
如果2个变量引用同一个对象,带引用类型的 ===
将返回true
。在下面的示例中,a
和b
都指向同一个对象(内存中的相同部分),因此它们是相同的。
const a = {};
const b = a; // assign `a`'s value, which is a reference to the `b`
console.log(a === b);
答案 2 :(得分:0)
它们不是同一阵列&amp;它们是单独的对象引用。如果你想比较这两个,那么将它们字符串化
var arr = [1, 2, 3];
var str = "123";
function compare() {
return (arr.join('').split('')).toString() === str.split('').toString()
}
console.log(compare());
console.log(arr.join('').split(''))
console.log(str.split(''))