文章

watch返回对象导致无限循环

watch 返回对象导致无限循环

watch 返回对象导致无限循环

注意点:vue watch导致无限循环

1623740445904-7015838b-9b62-44b8-986e-dc3e5b3e4566.png

刨析:

  • 对象和原始值不同,对象的比较并非值的比较,而是引用的比较:
  • 即使两个对象包含同样的属性及相同的值,它们也是不相等的
  • 即使两个数组各个索引元素完全相等,它们也是不相等的
1
2
3
4
var o = {x:1}, p = {x:1};      // 具有相同属性的两个对象
log(o == p)                    // => false: 两个单独的对象永不相等
var a = [], b = [];            // 两个单独的空数组
log(a == b)                    // => false: 两个单独的数组永不相等

我们通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。

1
2
3
4
5
var a = [];  		// 定义一个引用空数组的变量a
var b = a;   		// 变量b引用同一个数组
b[0] = 1;    		// 通过变量b来修改引用的数组
log(a[0])     	// => 1: 变量a也会修改
log(a === b)    // => true:a和b引用同一个数组,因此它们相等
本文由作者按照 CC BY 4.0 进行授权