关于javascript:JS对象

对象
用来存储属性和办法的汇合
对象的援用保留在栈区,对象的值保留在堆区

0) 规定

1. 对象以{}为边界
2. {}外部保留的是一个个属性名和属性值组成的键值对
3. 属性名和属性值之间通过:宰割
4. 不同的键值对之间通过,宰割
5. 属性值除了数字类型之外,所有的都须要应用''
6. 属性名个别不须要加引号,当属性名蕴含特殊字符(空格)时,须要加引号

1) 创立形式

1. 对象字面量
    var obj = {}

    var obj2 = {
        name:'tom',
        age:13,
    }
   动静的新增键值对:
      obj2.phone = 12345; 

 2. 构造函数Object ---用来创建对象obj
        var obj = new Object();
        obj.name = 'tom';
        obj.gender = 'male';

2) 对象属性的拜访

    var obj = {
        name:'tom',
        age:13,
        'my address':'ty'
    };
    1. 通过.
        对象.属性名
        console.log(obj.name); // tom
        console.log(obj.age); // 13
    2. 通过[]
        对象['属性名'] ---+引号阐明是常量,就不会去找变量
        console.log(obj['my address']); // ty
        对象[变量]
var name='age';
obj[name] //等价于obj['age'] 等价于obj.age

3) 对象属性的删除
    delete obj.name;

    var obj = {
        name:'tom',
        age:13,
        'my address':'ty'
    };
    delete obj.age;
 比照java对象,js有什么非凡?
1.js对象的属性能够被删除,java对象的属性是固定的
2.js对象的属性能够随便增加,java对象的属性是固定的
3.js对象能够通过字面量及构造函数来获取,java对象只能通过类构造函数

--4) 对象的办法
    Object.prototype.xxx
        constructor     构造函数
        toString        对象的字符串示意
        hasOwnProperty  检测对象的属性
        ...

5) 对象序列化和反序列化
什么叫序列化?  将内存中的对象转换为字符串形容(对象不能通过io流传输 --http只容许字节流和字符串)
为什么要序列化?不便网络传输(io流)
    序列化 
1.惯例转换
 obj.toString()
2.将对象转换为json字符串
 JSON.stringify(obj)   
3.转换为查问字符串
var qs = require('querystring')
qs.stringify(obj)
    反序列化 JSON.parse()
        将json字符串转换为对象

    var obj = {
        name:'tom',
        age:13
    }
    var res = JSON.stringify(obj);
    console.log(typeof res); // string        
     
    obj.toString()            // [Object Object]
    JSON.stringify(obj)   // {''name'' :''tom'',''age'':13}
    qs.stringify(obj)        // name=terry&age=12
    var result = JSON.parse(res);
    console.log('result:',result);

Object 是所有构造函数的父构造函数,所有的构造函数都间接间接的继承Object。
所有的实例对象都能够调用其构造函数及其父构造函数的原型中的办法
Object.prototype.toString()
Object.prototype.valueOf() ...

eg1. obj的构造函数是Object,所以obj能够调用Object.prototype的办法
var obj ={} ;//var obj = new Object();
obj.toString();

eg2. arr的构造函数是Array,Array继承Object,因而,arr能够调用Array.prototype及Object.prototype中的办法
var arr = new Array(3);
arr.toString();

var obj = {
                     name:'tom',
                     age:13}
obj.toString()            // [Object Object]
JSON.stringify(obj)   // {''name'' :''tom'',''age'':13}

—————————————-

    6) 对象的遍历
    for-in循环:for(var key in obj){  }

    var obj = {
        name:'tom',
        age:13,
        'my address':'ty'
    }
    for(var key in obj){
        //console.log(key);---输入属性名
        console.log(obj[key]); ----输入属性值 (当key为变量时,要obj[key]拜访值)
    }
     
     7) 自定义属性
var obj ={ name:"terry"}    name 能够迭代,可读可写
假如:
1.name不可迭代,不可写,name不可被删除,当对象属性的值产生扭转,想晓得扭转?
  obj.name=''terry''   
   =       Object.defineProperty(obj,''name'',{
        configurable:true,
        writable:true,
        enumrable:true;
        value:"terry"})
2.当name,age,gender属性发生变化时,都想检测到
    var obj={}
    obj.name = "terry"
     =>
    Object.defineProperties(obj,{
        name:{},
        gender:{}
    })
    

1、对象的解冻

var obj = {
    name:'tom',
    age:13,
    'my address':'ty'
};
Object.freeze(obj);
obj.age = 15;
console.log(obj.age); // 13

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理