关于javascript:JS对象

10次阅读

共计 2384 个字符,预计需要花费 6 分钟才能阅读完成。

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

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
正文完
 0