JSON.stringify的注意点

版权声明:个人笔记,不喜勿喷 https://blog.csdn.net/qq_39571197/article/details/87993157

* 1、不获取值为undefined、function、symbol的属性,null会被获取哦
* 2、不获取原型链的属性
* 3、不获取不可枚举属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JSON.stringify的注意点</title>
</head>

<body>
    <script>
        /**
         * 1、不获取值为undefined、function、symbol的属性,null会被获取哦
         * 2、不获取原型链的属性
         * 3、不获取不可枚举属性
         */
        class Person {
            constructor(options = {}) {
                this.name = Math.random().toString(36);
                Object.assign(this, options);
            }
            sayHello() {
                // 此为不可枚举属性,之前记录过,class中的方法都是由Object.defineProperty()添加的
                console.log(`my name is ${this.name}`);
            }
        }
        console.log(Object.getOwnPropertyDescriptor(Person.prototype, 'sayHello'));
        Person.prototype.sayHello = function () {
            console.log(`--- my name is ${this.name}`);
        };
        Object.defineProperty(Person.prototype, 'sayHello2', {
            configurable: true,
            writable: true,
            value() {
                console.log(`2222my name is ${this.name}`);
            },
        });
        Person.prototype.sayHello2 = function () {
            console.log(`--- 2222my name is ${this.name}`);
        };
        Person.prototype.sayHello3 = function () {
            console.log(`--- 3333my name is ${this.name}`);
        };
        const person = new Person({
            a: null,
            b: undefined,
            c() {
                console.log('c')
            },
            d: Symbol('d'),
        });
        person.sayHello();
        person.sayHello2();
        person.sayHello3();
        /**
         * sayHello1、sayHello2,虽然看起来重写了,这是因为writable:true,只是重写了value
         * sayHello3,是原型链上的可枚举属性
         * 
         */
        console.log('------------------------------------------'); {
            const allKeys = [];
            for (let k in person) {
                allKeys.push(k);
            }
            console.log(allKeys); // ["name", "a", "b", "c", "d", "sayHello3"]
        }
        console.log('------------------------------------------');
        const personDP = JSON.stringify(person);
        console.log(personDP); // name、a
    </script>
</body>

</html>

猜你喜欢

转载自blog.csdn.net/qq_39571197/article/details/87993157