javascriptの改竄防止対象を深く理解する

3448 ワード

javascriptには複数の属性のConfigrable、Writable、Enumerable、Value、Get、Setが内蔵されており、属性の動作を制御しています.同じES 5にもいくつかの方法があり、対象の行為を指定します.私達は知っています.javascriptの対象は共有できるもので、デフォルトで開拓できるものです.
//          ,      
//    ,             
var person = {name:'liufang'};
person.age = 22;
document.write(person.age+"<br>");//22
他の属性や方法を追加、削除、変更できます.しかし、これはいくつかの問題を引き起こすことができます.例えば、複数の人が開発する時、いくつかの属性が修正され、工程上のトラブルを引き起こします.これは改竄防止の対象の誕生を促した.改竄防止の対象は三つのレベルがあります.それぞれ拡張対象、密封対象、凍結対象です.
オブジェクトを拡張できません
まず、オブジェクトの拡張不可について説明しましょう.通常のオブジェクトについては、拡張不可能なオブジェクトを設定することにより、新たに追加した属性を無効にします.
//     
Object.preventExtensions(person);//        
person.smallName = 'ff';
document.write(person.smallName+"<br>");//undefined
//         
//          
document.write(Object.isExtensible(person)+"<br>");//false
//             ,        
delete person.age;
document.write(person.age+"<br>");//undefined ,      
オブジェクトの拡張はできませんが、属性の追加を防ぐことができますが、他の人の削除を防ぐことはできませんが、もちろん、変更を防ぐことはできません.そのため、第二段階の密封対象を引き出しました.
オブジェクトを密封する
シールの対象とは、拡張不可能なオブジェクトにルールを追加し、属性を削除することができないことです.
//    
//              
var people = {name:'liufang'};
Object.seal(people);//     
delete people.name;
document.write(people.name+"<br>");//liufang ,      
people.name = "tyq";//      ,      
document.write(people.name+"<br>");//tyq ,      
//  
document.write(Object.isSealed(people)+"<br>");//true
シールの対象は削除を防止していますが、修正を阻止できないため、最高レベルの制限があり、つまり凍結対象となります.
オブジェクトを凍結
凍結されたオブジェクトは拡張も削除も修正もできません.
//    
//    ,    ,    
var man = {name:'tyq'};
Object.freeze(man);
//  
document.write(Object.isFrozen(man));//true
最後に注意したいのは、いったんオブジェクトを改竄した場合は、元に戻すことができないので、慎重に検討する必要があります.本論文の実例demo住所:demo