js对象的循环引用

JavaScript021

js对象的循环引用,第1张

1 .当一个对象的属性是自己的时候,使用JSON.stringify或者一般的没有处理的deepClone的时候会发现栈溢出

1 .json序列化的时候,序列化的对象尽量避免循环依赖,子类不定义与父类相同名称的成员,避免定义非成员变量的getter、setter方法

1 .出现循环引用的时候算是bug么?要怎么处理

2 .webpack里面也会有这种情况,循环依赖a-b-c-a

3 .对象存在循环引用的时候,打印不会出现栈溢出,深拷贝的时候,才会的导致栈溢出

1 .定义了引用类型的变量后该变量存的是堆内存的地址,通过地址访问堆内存的数据,从而产生了引用。而基本数据类型定义后存储的是数据值,不需要引用

2 .在js中对两个引用类型使用 === 判断是对两者的地址进行判断

3 .所以判断是否存在循环引用,可以简单定义为对象内部的属性是否和对象本身的地址相同

1 .去除对象中涉及到的循环引用的属性.消除循环引用JSON.decycle方法可以解除循环

2 .将循环引用中的一个对象缓存起来,以避免重复序列化或者创建

使用for...in可以遍历js对象的属性,用法如下:

for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。

for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

for (变量 in 对象)

{

//在此执行代码

}

“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。

示例:

for (var sProp in window) {

alert(sProp)

}

以上例子会弹出window对象中的所有属性

js循环遍历对象的方法

    var    array = {

        'key1':1,

        'key2':2

    }

     for(let key in array){

        console.log(key + '---' + obj[key])

    }

第二种方法

    const obj = {

    id:1,

    name:'zhangsan',

    age:18

     }

 console.log(Object.keys(obj))

console.log(Object.values(obj))