一、对象的定义形式



java对象清空数据 java对象删除某个属性_默认值

01.字面量


var myObj = {} myObj.age = 30

02.new Object


var myObj = new Object()myObj.age = 30

java对象清空数据 java对象删除某个属性_java对象清空数据_02

二、对象属性的访问



java对象清空数据 java对象删除某个属性_java对象清空数据_03

0

1点操作符

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

var myObj = {    age: 20}console.log(myObj.age) // 20



java对象清空数据 java对象删除某个属性_java对象清空数据_03

02

[]操作符

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

var myObj = {     age: 20 }console.log(myObj['age']) // 20


注:属性名都是字符串,即使在定义的时候没有声明,对象也会把他们转换为字符串形式

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



java对象清空数据 java对象删除某个属性_java对象清空数据_03

01满足标识符的属性名

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

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

<script>        var myObj = {            age: 20,            'myAge%': 30        }        console.log(myObj['myAge%']) // 30script>


注:JavaScript的标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头

java对象清空数据 java对象删除某个属性_java对象清空数据_03

0

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



六、对象的属性描述符



java对象清空数据 java对象删除某个属性_操作符_07

java对象清空数据 java对象删除某个属性_java对象清空数据_08

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



java对象清空数据 java对象删除某个属性_java对象清空数据_03

01

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>



java对象清空数据 java对象删除某个属性_java对象清空数据_03

02Configurable


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>



java对象清空数据 java对象删除某个属性_java对象清空数据_03

0

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>



java对象清空数据 java对象删除某个属性_java对象清空数据_03

04set和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>

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



java对象清空数据 java对象删除某个属性_java对象清空数据_03

0

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);  }}



java对象清空数据 java对象删除某个属性_java对象清空数据_03

0

2删除

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

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


一些读书摘要


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