Javascript中的对象

对象

JS中数据类型分为两大类:基本类型数据, 引用类型数据 。主要区别是位于的内存位置不同。
值类型:存储在栈中
引用类型:存储在堆里

对象是属性的无序集合。属性:分两部分:属性名、属性值。
属性值可以是任意的数据类型: 字符串、数字、布尔值、null、undefined、数组、对象、函数等

一,对象的操作

对象的属性操作可以通过两种语法: 方括号语法、 点语法

1.增加属性

obj["xingbie"] = "男";  
obj.xingbie = "男";
obj[xingbie + 1] = "男";

主要区别:方括号里,是一个JS的执行环境 里面可以写js代码 点语法,点什么就是什么

2.删除属性

var obj2 =  {
            age: 33,
            sex: "男"
         }
delete obj2.age;

3.循环 for… in循环 专门用于循环对象

for (var i in obj) {
    console.log(obj[i]);
}

i表示属性名 obj表示被循环的对象
obj[i]才能得到里面的对应属性值
obj.i 只能得到i属性

二,对象的属性特性

对象是由属性组成的。
可是在ES5之前,只要能够得到一个对象,就可以随意修改它的属性。
于是ES5中规定了对象的属性有4个特性

1 value
2 writable
3 enumerable
4 configurable

    //因为增加了属性的新特性所以定义属性的方式发生了变化
    var obj = {
        a: 1
    }
   // 定义对象的属性的特性:ES5的方式
    Object.defineProperty(obj, "color", {
        value: 'red',
        writable: false,
        enumerable: false,
        configurable: false  // 不可以再次配置color属性
    })
//因为enumerable设置为false的原因,循环不到color属性
     for (var i in obj) {
         console.log(i)
     }

//因为writable设置为false的原因,无法改变color属性
     obj.color = "blue";
     console.log(obj.color);

     inp.oninput = function() {
         var value = this.value;
         obj.color = value;
     }

ES5还对对象的属性增加了两个函数 一个叫做get 一个叫做set

Object.defineProperty(obj, "color", {
    get: function () {
        console.log("获取")
        return this._color;
    },
    set: function (value) {
        console.log("设置")
        title.innerHTML = value;
        inp.value = value;
        this._color = value;
    },
    // value: 'red',
    // writable: false,
    enumerable: false,
    configurable: false  // 不可以再次配置color属性
})

obj.color = 123;

三,对象的静态方法

//对象的属性操作有几种:读取、修改、删除、添加 

 Object.preventExtensions(); // 禁止拓展 
 Object.preventExtensions()
 var obj = {
     name: "王五",
     sex: "男",
     age: 22
 }
 Object.preventExtensions(obj);
 //增加新属性不可以了 但是 修改、删除依旧可行
 obj.married = false;
 obj.name = "王六";
 delete obj.sex;
 console.log(obj)


 Object.seal() // 密封 不可以增加 不可以删除 可以修改 可以读取
 var obj = {
     name: "王五",
     sex: "男",
     age: 22
 }

 Object.seal(obj);
 obj.married = false;
 obj.name = "王六";
 delete obj.sex;
 console.log(obj)


 Object.freeze() // 冻结 不可以增加 不可以删除 不可以修改 只能读取
 var obj = {
     name: "王五",
     sex: "男",
     age: 22,
     son: {
         age: 1
     }
 }
 Object.freeze(obj);
 obj.married = false;
 obj.name = "王六";
 delete obj.sex;
 console.log(obj);

四,对象的方法 (es6新增)

对象的方法在ES6中增加了两个静态方法

1.Object.assign() 浅复制方法

第一个参数表示接收属性的对象
之后的每一个参数表示提供属性的对象 如果具备相同属性名,则以后面的为准

var obj = {}
var obj1 = {
    name: "张三",
    age: 15,
    sex: '男',
    married: false,
    girlFriend: {
        name: '小花',
        age: 14
    }
}
var obj2 = {
    age: 13
}
Object.assign(obj, obj1, obj2);
// console.log(obj);
obj.girlFriend.age = 15; // 修改一个对象的内容
console.log(obj1.girlFriend.age); // 结果影响到了另一个对象 说明是浅复制

2. Object.is() 用于比较两者是否全等

console.log(NaN === NaN); //false
console.log(Object.is(NaN, NaN));// true

console.log(0 === -0); //true
console.log(Object.is(0, -0)) //false
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值