JS对象的基本使用

    技术2025-08-27  7

    什么是对象

    对象指的是无序的数据集合,是键值对的集合。对象的键名是字符串,而不会标识符。

    对象有两种声明方式,一种是使用new 后面加上object构造函数进行川内创建,另外一种是直接使用对象字面量进行创建。

    对象的属性

    属性名可以是字符串、非空字符串、其他可以转换为字符串的都可以作为属性名,而标识符则必须以字母、下划线、$字符和中文开头

    1. 属性名规则

    以下的属性名都是正确的:

    let obj1={ _we:'hello', 123:'hi', '':‘gray’, yl:'black' } 属性名可以不加引号,但是如果属性名包括中文、空格等特殊字符,则必须添加引号;

    以下的属性名则会报错:

    let obj2={ 我:'nigh', he is:'hello' //正确应该是'he is':'hello' }

    2. 奇怪的属性名(扩展)

    let obj3={ 1:'a', 1e2:'bb', 1e-2:'ccc', } 返回的结果是obj3={'1':'a','100':'bb','0.01':'ccc'} js会先进行计算,然后再转换为字符串的形式;

    3. 变量做属性名

    如果不经过特殊的处理,对象无法识别作为键名的是常量字符串还是变量,因此需要使用一定的方法,才能让变量作为字符串

    let v='name' let obj4={ v:'macycle', [v]:'huang' } 返回的结果是obj3={'v':'macycle','name':'huang'}

    删除属性

    完整的删除一个对象的属性有以下两种方法: 方法一:delete obj.xxx

    let obj1={name:'小红',age:13} delete obj1.name 返回obj1的结果是{'age':13}

    方法二:delete[‘xxx’]

    let obj2={name:'小红',age:13} delete obj2['name'] 返回obj2的结果是{'age':13}

    !!!以下方法并不能删除属性

    let obj3={name:'小红',age:13} obj3.name=undefined; 返回obj3的结果为{'name':undefined,'age':13} obj3的name属性还存在,只是值为undefined;

    对于obj1的删除方式,使用 ‘name’ in obj1,返回的结果是 false; 而对于obj3的删除方式,使用‘name’ in obj3,返回的结果 是true,只不过他的值为undefined;

    查看所有属性

    JS提供了查看自身属性的方法: 方法一:Object.keys(obj)

    该方法用来查看对象的所有自身属性; let obj4={name:'小红',age:13} Object.keys(obj4) 返回的结果是['name','age']

    方法二:console.dir(obj4)

    该方法用来查看对象的所有属性,包括公有属性; let obj5={name:'小红',age:13} console.dir(obj5) 返回的结果是一个对象,其中除了包括name属性与age属性,还包括创建obj5实例的构造函数的公共属性。

    方法三:obj.hasOwnProperty()

    该方法用来查看某个属性是否属于自身的属性 let obj6={name:'小红',age:13} obj6.hasOwnProperty('toString') 返回的结果是false;

    方法四:‘xxx’ in obj

    该方法可以查看某个属性是否属于该对象,或者是该属性是否在他的原型链上存在。 let obj7 ={name:'小红',age:13} 'name' in obj7 返回true; 'toString' in obj7 返回true;

    查看属性

    方法一:obj[‘key’]

    let obj8={name:'小红',age:13} obj8['name'] 返回结果是'小红',这里需要注意的是,传入参数是一个字符串的形式,因为obj的属性虽然在书写的时候有时可以不用加引号,实际上js后面帮我们加了引号了。

    方法二:obj.key

    let obj9={name:'小红',age:13} obj9.name 返回的结果也是'小红';

    修改与增加属性

    在JS中,增加属性与修改属性的方法比较类似,如果该对象有某一个属性了,则属于修改属性,否则就是增加属性。

    let obj10={name:'小红',age:13} obj10.name='小黄' 则obj10变成了{name:'小黄',age:13} obj10.sex='female' 则obj10变为{name:'小红',age:13,sex:'female'}

    ES6中,添加了assign()方法用于一次添加多个属性;

    let ars={name:'cdcd',age:19} Object.assign(ars,{sex:'female',national:'japan',married:'no'}) 返回的结果是:{name: "cdcd", age: 19, sex: "female", national: "japan", married: "no"}

    修改与增加公共属性

    一般情况下是无法通过自身直接修改公有属性的,那样只会给自身添加一个属性,因为公有属性是实例对象中通过一个隐藏属性__proto__中保存的指针所指向的。

    let obj11={} obj11.toString='xxx'相当于向自身添加一个tostring的属性 如果想要修改公有属性,必须操作原型链上的属性 obj11.__proto__.toString='xxx'; Object.prototype.toString='xxx';

    推荐Object.create()修改原型链

    通过该方法,相当于往链上面添加一个节点,该节点可以作为被添加的对象的公共属性;

    let common={name:'小红',age:13} let obj12=Object.create(common) obj12.flag=true; 结果就是obj12有一个自身的属性flag,原型链上面,有一个原型对象是common对象;
    Processed: 0.009, SQL: 9