js防止篡改对象

1、Object.seal()

使用Object.seal()可以防止向一个对象添加属性删除属性,但是可以更改属性

<script>
    let person={
        name:'testName',
        age:'testAge'
    };
    Object.seal(person);
    //可以更改
    person.name='changeName';
    //不能删除
    delete person.age;
    //不能添加
    person.skill='study';

    console.log(person);
</script>

输出结果
js防止篡改对象_第1张图片
如果使用严格模式(use strict),执行添加和删除操作会直接报错
在这里插入图片描述

2、使用Object.freeze冻结对象

Object.freeze可以阻止对一个对象属性的更改

<script>
    let person={
        name:'testName',
        age:'testAge'
    };
    Object.freeze(person);
    //不可以更改
    person.name='changeName';

    console.log(person);
</script>

输出
js防止篡改对象_第2张图片

seal和freeze结合,一个对象将不可添加删除属性以及更改属性。

3、Object.defineProperty

使用Object.defineProperty可以将单个属性冻结

	let person={
        name:'testName',
        age:'testAge'
    };
    
    Object.defineProperty(person,'name',{
        writable:false,//不可写
        enumerable:false//不可遍历
    });
    
    person.name='changedName';
    console.log(person);
    
    for(let i in person){
        console.log(i,person[i])
    }

js防止篡改对象_第3张图片

可以通过Object.isFrozen,Object.isSealed,Object.isExtensible判断当前对象的状态

你可能感兴趣的:(js)