JavaScript中对象和数组(数组也是对象),操作符主要有两种:
. 和[]
这两种有什么区别呢?
请看测试代码
//读操作
let temp={area_id:"1",county_id:"1",plate_no:"11",product:"40"};
let d1=['area_id','county_id','product'];
console.log(temp.area_id); //输出1
console.log(temp['area_id']); //输出1
console.log(d1.area_id); //undefined
console.log(d1['area_id']); //undefined
console.log(d1[0]); //输出area_id
//写操作
let connectString={};
connectString["value"]="sss"; //输出 { value: 'sssss' }
connectString.value='sssss'; //输出 { value: 'sssss' }
let test=[];
test[0]='s'; //输出 [ 's' ]
test.a='ss'; //输出 [ 's', a: 'ss' ]
console.log(test.a); //输出 ss
console.log(test[1]); //输出 undefined,可以看到虽然在test中存储了一个字符串一个对象,但是test[1],并没有把对象输出出来
console.log(test[0]); //输出 s
总结:
数组是特殊的对象,对象的所有操作都可以对一个数组进行,通过.和[]操作符都可以对对象和数组进行读写操作,对于单条赋值语句是没有问题的,两者是通用的。
对象的两个操作,应该大家都没问题,通过.和[]是一样的。
数组的操作,.和[]是不同的,通过.运算符,是把数组作为对象进行操作的,通过test[0]是作为数组进行的,两者相当于隔离开来,可以这么理解。而且对于同一个数组,对象操作和数组操作,都是存储在一起的,请看下面的Code
let test=[];
test[0]='s';
test.a='sss';
test[1]={a:'ss'};
console.log(test);
//输出 [ 's', { a: 'ss' }, a: 'sss' ],可以看到对数组的对象操作,是放在存储结构的最后面
所以为了防止混乱,最好是
如果是数组,就使用[]操作符
如果是对象,就使用 . 操作符,
这样就不会产生更混乱
那么接下来是重点,如果在一个循环中对一个对象进行赋值会发生什么?
let d1=['area_id','county_id','product'];
let connectString={};
d1.map((value)=>{
connectString.value='ss';
});
console.log(connectString); //输出结果为{ value: 'ss' },可以看到并没有把数组中的所有作为键复制给connectString
换一种操作
let d1=['area_id','county_id','product'];
let connectString={};
d1.map((value)=>{
connectString[value]='ss';
});
console.log(connectString);
//输出 { area_id: 'ss', county_id: 'ss', product: 'ss' },可以看到把数组的每一项作为对象的键值对赋值成功
总结:在循环操作中,如果要对对象赋值,使用[]操作符,不能使用.操作符
那么是为什么呢?
[]操作符:是取[]里面的值赋值给对象或者数组
.操作符:是直接把.后面作为值赋值给对象或者数组的,不会去取他的值
当然,这是通过实践总结出来的,那么最基本的是什么呢?就是Javascript本身对于对象赋值操作有两种不同的处理方式:
* 如果属性或方法的名称是简单的标识符,则可在对象名称与句点之后加入该属性*
如果属性或方法的名称不是简单的标识符,或在编写脚本时不知道该属性,则可在方括号内使用表达式作为属性的索引
详情链接:
Javascript对象和数组