对象删除某个属性_JavaScript对象(Object)

一、对象的定义形式

afd3d145e1ac2a9b450c0eb4535cccff.png01.字面量
 var myObj = {} myObj.age = 30
02.new Object
 var myObj = new Object()myObj.age = 30

cc2792ad0d7f80061f205e4cc37dff22.png

二、对象属性的访问

e8ba42f60169b74ba9d387ccd4b9d864.png0 1点操作符

下面使用了点操作符访问属性age

var myObj = {    age: 20}console.log(myObj.age) // 20
e8ba42f60169b74ba9d387ccd4b9d864.png02 []操作符

下面使用了[]操作符访问属性age

 var myObj = {     age: 20 }console.log(myObj['age']) // 20
注:属性名都是字符串,即使在定义的时候没有声明,对象也会把他们转换为字符串形式

三、点和[]操作符的区别

e8ba42f60169b74ba9d387ccd4b9d864.png01满足标识符的属性名 当属性名满足标识符的命名规范时,点操作符和[]操作符都可以使用,

当出现特殊命名时,如下:属性名是myAge%,只能使用[]操作符

 <script>        var myObj = {            age: 20,            'myAge%': 30        }        console.log(myObj['myAge%']) // 30script>
注:JavaScript的标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头 e8ba42f60169b74ba9d387ccd4b9d864.png0 2计算属性名

[]内部可以使用表达式。

  <script>        var int = 'hello'        var myObj = {            [int + 'word']: 20        }        console.log(myObj['helloword']) // 20script>

四、对象的引用

如下:变量myObj2和myObj都指向同一个对象{},

当给myObj设置age属性为18时,myObj2 也能访问到18,

因为这两个对象指向同一个内存地址,修改其中一个变量,另一个变量也会受到影响

<script>        var myObj = {};        var myObj2 = myObj        myObj.age = 18        console.log(myObj2.age) // 18        myObj2.name = 'zhangsan'        console.log(myObj.name) // zhangsanscript>

当某个对象不再引用其中一个变量,不会影响另一个对象的值

myObj2 = {}console.log(myObj.age) // 18console.log(myObj2.age) // undefined

五、对象属性的查看

in运算符可以检查对象是否具有某个属性,存在返回true,否则返回false

如下:a是myObj的属性,返回true

var myObj = {  a: 20}a in myObj // true

六、对象的属性描述符

8a74099d396d38bf4357c6ad3540e629.png 78694df559463a3b811febf420e3da10.png

使用defineProperty(..)可以给对象添加一些属性并显式指定某些特性

e8ba42f60169b74ba9d387ccd4b9d864.png01 Writable

writable 默认值false, 表示不允许修改这个属性值

如下:当给myObj重新设置age为33时,只有writable 为true时,才能打印出33

  <script>        var myObj = {}        Object.defineProperty(myObj, 'age', {            value: '30',            writable: true        });        myObj.age = 33        console.log(myObj.age); // 33script> <script>        var myObj = {}        Object.defineProperty(myObj, 'age', {            value: '30',            writable: false        });        myObj.age = 33        console.log(myObj.age); // 30script>
e8ba42f60169b74ba9d387ccd4b9d864.png02Configurable

configurable 默认值false,表示不允许删除这个属性

如下:当configurable 为true时,myObj.age为undefined

<script>        var myObj = {}        Object.defineProperty(myObj, 'age', {            value: '30',            configurable: true        });        delete myObj.age        console.log(myObj.age); // undefinedscript>
<script>        var myObj = {}        Object.defineProperty(myObj, 'age', {            value: '30',            configurable: false        });        delete myObj.age        console.log(myObj.age); // 30script>
e8ba42f60169b74ba9d387ccd4b9d864.png0 3enumerable

任何enumerable 默认值false, 表示不允许遍历一

如下:当enumerable为true时,可以打印出属性的值

   <script>        var myObj = {        }        Object.defineProperty(myObj, 'age', {            value: '30',            enumerable: true        });        for(var key in myObj){            console.log(myObj[key]) // 30        }script>
 <script>        var myObj = {        }        Object.defineProperty(myObj, 'age', {            value: '30',            enumerable: false        });        for(var key in myObj){            console.log(myObj[key]) // 无        }script>
e8ba42f60169b74ba9d387ccd4b9d864.png04set和get

当设置set或者get时,JavaScript会忽略它们的value和writable特性

set:可以传参,当属性被设置时调用get:没有参数,在读取属性时调用第一段代码给myObj设置了属性todayYear,根据(x + '-' + this.month)运算规则,动态设置了date的属性值第二段代码可以直接给myObj的todayYear添加get,当读取属性时直接调用了(new Date().getFullYear())
<script>        var myObj = {             month: 10,             date: ''        }        Object.defineProperty(myObj, "todayYear",            {                set: function (x) {                    this.date = x + '-' + this.month;                }            }        );        myObj.todayYear = new Date().getFullYear();        console.log(myObj.date) // 2020-10script>
  <script>        var myObj = {             month:10        }        Object.defineProperty(myObj, 'todayYear', {            get() {                return todayYear = new Date().getFullYear();            },        });        console.log(myObj.todayYear) // 2020script>

七、对象属性的遍历和删除

e8ba42f60169b74ba9d387ccd4b9d864.png0 1 遍 历

for in 遍历的是对象的可遍历属性,当给对象的属性描述符enumerable设置为false时,此属性不会被遍历

hasOwnProperty可以判断是否为自身属性,是返回true,否则返回false

<script>        var myObj = {            age: 20,            name: 'zhangsan',            doSomething:function(){            }        }        for(var key in myObj){            console.log(myObj[key])        }script>
var myObj = { name: 'zhansan' };for (var key in myObj ) {  if (myObj.hasOwnProperty(key)) {    console.log(key);  }}
e8ba42f60169b74ba9d387ccd4b9d864.png0 2删除

删除成功后再次返回会返回undefined

 <script>        var myObj = {            age: 20,            name: 'zhangsan',            doSomething:function(){            }        }        delete myObj.age         console.log(myObj.age) // undefinedscript>
一些读书摘要

所谓“阅读的人”(readers),是指那些今天仍然习惯于从书写文字中汲取大量资讯,以增进对世界了解的人,就和过去历史上每一个深有教养、智慧的人别无二致。

-- 【美】莫提默·艾德勒,查尔斯·范多伦《如何阅读一本书作者》

References

你不知道的JavaScript(上卷)作者:[美]凯尔辛普森

MDN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值