对象

JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。

键值对是有键和值组成的,一般称为key-value。键和值直接用冒号分割,键只能为字符串,值可以为任何类型。

在对象中,多个键值对之前没有顺序概念,之间用逗号分割。

const obj = {
    name:'Tom',
    age:10,
    'a:b':'xx',
}

键为字符串,默认可以不加单引号,但如果字符串本身不加单引号有歧义

比如,上方第三个键值对中的键,为a:b一个字符串,如不加单引号,会有歧义,所以需要加。

通过对象的键可以对其对应的值进行读写操作。

const obj = {
    name:'Tom',
    age:10,
    'a:b':'xxx',
}

//通过 . 读取对象属性值
console.log(obj.name);//输出Tom
obj.name = 'XXX';
console.log(obj.name);//输出XXX

//通过 [] 读取对象属性值,中括号内需要填字符串
console.log(obj.['age']);
obj['age'] = 11;
console.log(obj['age']);

//有歧义的键,只能用[]号方式访问
console.log(obj.['a:b']);

//使用变量作为键时,只能使用[]方式访问
const key = 'name';
console.log(obj.[key]);

对象深浅复制

对象的深复制和浅复制有非常大的区别,在实际编码中,经常应发不易调试的bug。

首先我们看一段代码

const a = {name:'Tom'};
const b = {name:'Tom'};

if(a == b){
    console.log('相等');
}
else{
    console.log('不等');
}

请思考上述代码的运行结果是什么?

运行结果为不等。是不是很你期望的答案不一致。我们先不解释,在看下面的代码

const name1 = 'Tom';
const name2 = 'Tom';

if(a == b){
    console.log('相等');
}
else{
    console.log('不等');
}

results matching ""

    No results matching ""