Javascript 具有自引用的对象和数组
我对理解JavaScript行为非常感兴趣 对象:Javascript 具有自引用的对象和数组,javascript,Javascript,我对理解JavaScript行为非常感兴趣 对象: object = {object : window.object}; object = {object : window.object}; console.log(object === object); // true console.log(object.object === object); // false console.log(object.object === object.object); // true console.log
object = {object : window.object};
object = {object : window.object};
console.log(object === object); // true
console.log(object.object === object); // false
console.log(object.object === object.object); // true
console.log(object.object.object === object.object); // false
数组:
array = [window.array];
array = [window.array];
console.log(array === array); // true
console.log(array[0] === array); // false
console.log(array[0] === array[0]) // true
console.log(array[0][0] === array[0]) // false
为什么
返回false???有两个赋值给
window.object
。第一个创建一个新对象并将其分配给window.object
。其中有一个名为“object”的属性,其值为未定义
,因为在计算对象文本时窗口。object
为未定义
第二个赋值实例化一个新对象。该对象还有一个名为“object”的属性,其值是在第一次赋值中创建的对象
因此,window.object
与window.object.object
不是同一个对象
关键是在这样的作业中:
object = { object: window.object };
对象文字中“object”属性的值在赋值之前进行计算。在第一次赋值之后,您有以下内容:
object = { object: undefined }
第二个赋值创建一个新的对象,其object
属性包含window.object
的上一个值,并将其赋值给object
。现在你有了:
object = { object: { object: undefined } }
所以此时,object.object
是{object:undefined}
,这与object
不同
类似的事情也发生在数组示例中
如果要创建自引用对象,需要执行以下操作:
object = {};
object.object = object;
这不会在第二次指定中创建新对象,而是修改原始对象。然后你可以做:
console.log(object.object.object.object === object); // true
对于阵列,它将是:
array = [];
array[0] = array;
console.log(array[0][0][0][0][0] === array); // true
让我们逐行解释
object = {object : window.object};
//here object.object is undefined and object new object so object !== object.object
//lets obj1 = {object: undefined}
object = {object : window.object};
//here object is new instance of Object while object.object is equal to older object
//basically object != object.object
// obj2 = {object: obj1}
console.log(object === object); // true because same object obj2 == obj2
console.log(object.object === object); // false because two different object as obj1 != obj2
console.log(object.object === object.object); // true because same object obj1 == obj1
console.log(object.object.object === object.object); // false because undefined != obj1
为什么定义变量两次,然后覆盖它?编辑:ok;)如果你知道答案,为什么要发布这个问题?那么有两个对象?是的,有两个对象。为什么没有呢?每个不同的对象文字表达式都会创建一个新对象。
object = {object : window.object};
//here object.object is undefined and object new object so object !== object.object
//lets obj1 = {object: undefined}
object = {object : window.object};
//here object is new instance of Object while object.object is equal to older object
//basically object != object.object
// obj2 = {object: obj1}
console.log(object === object); // true because same object obj2 == obj2
console.log(object.object === object); // false because two different object as obj1 != obj2
console.log(object.object === object.object); // true because same object obj1 == obj1
console.log(object.object.object === object.object); // false because undefined != obj1