JS对象基本用法

236 阅读3分钟

之前我们学习了js的基本数据类型,现在我们来学习一下JS的复杂数据类型——对象Object.

1 对象的定义

JS中对象是复杂数据类型,是一组键值对,是无序数据的集合。
创建对象的两种方式:

1 let obj = {} // 字面量形式创建对象  
2 let obj = new Object() // 构造函数形式创建对象

2 对象属性的增删改查

删除对象 delete obj.xxx 或者delete obj["xxx"]
可以直接删除对象的一个属性

let obj = {name:"liqianlong",age:"18"}
delete obj.name 
//这样就直接删除掉了obj的name属性,我们可以通过name in obj 来查看是否属实
"name" in obj // 会返回false 

查看对象属性
1 Object.keys(obj);
可以查看对象obj的所有属性名

let obj = {name:"liqianlong",age:"18"}
Object.keys(obj);
{name,age}

2 Object.values(obj)
可以查看对象的所有属性值

let obj = {name:"liqianlong",age:"18"}
Object.values(obj);
{liqianlong 18}

3 console.dir(obj)
可以打印出对象所有属性,包含所有的隐藏属性

let obj = {name:"liqianlong",age:"18"}
console.dir(obj)
打印:
console.dir(obj)

4 obj.name || obj["name"]
这两个可以查到obj对象的name属性名的对应属性值,它们之间的区别是,点号只能查找符合标识符规范的属性名,而中括号可以查找任何类型的属性名,但是切记如果是中括号中一定要加上引号,不加引号指的是一个变量,而非一个确定的属性名

 let obj = {name:"liqianlong",age:"18" "hello world" :"shit"}
 obj.name 
 "liqianlong"
 obj.hello world
 //会报错 Uncaught SyntaxError: Unexpected string
 obj["hello world"]
 "shit"
 

谈到以上两种查找对象属性的方式,不得不提高一种具有迷惑性的方式,因为obj中的属性可以是任意数据类型,所以也可以是一个对象或者函数,如果需要调用这个属性时,是需要

let name = age
let obj = {name:"liqianlong",age:"18"}
obj.name 
返回liqianlong
obj["name"]
返回liqianlong
obj[name]
返回 "18",因为此时的name值其实为age,因为name是一个变量,已经被赋值为age了

增加或修改对象属性
1 obj.属性名 = 属性值
直接可以通过对象.属性名来直接添加一个属性, 如果已经有该属性则修改其值。

 let obj = {name:"liqianlong",age:"18"}
 obj.gender = "man"
 为obj对象增加了一个gender属性
 obj.name = "wangxing"
 修改了name属性的属性值为wagnxing

2 Object.assign(obj,{属性:属性值,属性2:属性值})
可以直接把想要添加的属性写在里面进行批量添加,适用于添加多个属性的情况

 let obj = {name:"liqianlong",age:"18"}
 Object.assign(obj,{country:"China",color:"yellow"})
 //为obj对象增加了两个属性

3 我们还可以修改或者增加对象的共有属性,或者说是修改其原型对象的属性;也可以修改对象的原型对象

let obj = {name:"liqianlong",age:"18"}
obj.__proto__["tostring"] = "xyz"
//也可以使用
window.Object.prototype["tostring"]="xyz"

//以上是修改对象的共有属性

let common = {country:"China",coloe:"yellow"}
let obj.__proto__ = common;
也可以使用函数
let obj = Object.create(common)
//这种是在新建函数时可以使用,直接回忆common为原型

查看一个属性是不是一个对象的属性

如果我们需要判定一个属性是否是一个对象obj的属性,可以通过两种方式
1 'name' in obj
它可以判断是属性是否是对象的属性,但是没办法区分是obj自己的属性还是公用属性 2 obj.hasOwnProperty('name')
这个方法可以判断一个属性是否是一个对象的自有属性。是返回true,否则是返回flase

let common = {country:"China",coloe:"yellow"}
"country" in obj
//返回true
"toString" in obj
//返回true,因为toString是共有属性

obj.hasOwnProperty("country");
//返回true,因为是obj对象的自有属性
obj.hasOwnProperty("toString")
//返回false,因为tostring是对象的公共属性