JavaScript 对象属性
- 属性中的 . 和 [ ](点 和 方括号)的区别
. :取对象自身的属性值;
[ ]:括号内容可以是变量;
var obj = {};
obj.name = 'Twx';
var nameA = 'name';
// 使用
obj['name'] = 'Twx'; 等价于 obj[nameA] = 'Twx';
- 属性的删除
delete obj.name; // delete obj['name'];
- 属性的检测(判断属性是否属于对象)
1. in 运算符
'name' in obj = true; => 结果是 布尔 类型
2. hasOwnProperty([变量名称])
1 hasOwnProperty('name') = true; => 结果是 布尔 类型
3. != undefined (未定义)
1 obj.name != undefined => true; // 结果是 布尔 类型
- 枚举属性(for in 遍历)
1. for in 遍历中,对象 遍历出的是 key 值
var obj = {x:1,y:2,z:3};
for(a in obj){
a; //x,y,z key 值
obj[a]; //1,2,3 value 值
}
2. for in 遍历中,数组 遍历出的是 索引 值
var arr = [{x:1},{y:2},{z:3}];
for(a in arr){
a; //0,1,2 数组的索引值
}
3. 数组另两种遍历方式
3.1 for(var i = 0;i < 10;i++){ ... }
for(var i = 0;i < 10; i++){
...
// 同步执行
}
3.2 $.each(arr, function(index【索引】,item【值】){ ... })
$.each(arr, function(index【索引】,item【值】){
...
// 异步执行
});
4. 序列化
浅拷贝 只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝(例:assign())
深拷贝 是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝(例:JSON.parse()和JSON.stringify(),但是此方法无法复制函数类型)
// 深拷贝案例
var obj = {x:1,y:2,z:3};
JSON.stringify(obj); //string {'x':1,'y':2,'z':3};
typeof(JSON.stringify(obj)); //string
var str = JSON.stringify(obj);
JSON.parse(str); // object
5. ajax 传参 数据方式
var data = {
'name':_name,
'age':_age,
...
}
// ajax
data:{dataJson:JSON.stringify(data)} // 传参