为什么" 123" .split('')不等于[1,2,3] .join('')。split(') ;&#39)

时间:2018-04-19 07:31:12

标签: javascript

这似乎是一个非常基本的问题,但无法找到有关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 ......?

3 个答案:

答案 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。在下面的示例中,ab都指向同一个对象(内存中的相同部分),因此它们是相同的。

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(''))