对象
对象的字面量:
var parent = new Object();
parent.name = 'a';
parent['b'] = 20;
console.log(parent);
嵌套对象字面量:
var y = {
name: '阴阴',
age: 17,
action: function () {
console.log(this.age);
}
}
y.action(); //17
函数声明 :
function sum(x, y) {
return x + y
}
函数表达式:
var a = function (x, y) {
return x + y
}
预解析 :
function f() {
console.log(11);
};
var f = 222;
console.log(f);
对象的属性和方法
- 设置
var obj = {}
obj.name = 'aaa'
obj['age'] = 20
- 获取
obj.name;
obj['age'];
. 与 [ ] 的区别 [ ]得到的是一个变量
var obj = { name :'哈哈', age :20, }; obj['name']; var n = 'name'; obj[n] == obj['name'];
- 属性删除
var o = {
name:"hah",
age :15
};
delete o.name //或者 o.name = ""
console.log(o); //age:15
- 检测属性
var obj = {
name:'哈哈',
age:10
};
console.log('name' in obj); //自有属性与继承属性都兼容 用in判断 name是否在obj里面
console.log(obj.hasOwnProperty('name')); //只兼容自有属性 才用hasOwnProperty
学习小技巧:接收一个新的方法,或者新的属性,如何理解:字面意义它是干啥的;对应的返回值;对应有啥参数
遍历属性
for ...of.... 与 for....in ....
var obj = {name:'d',age:20};
for (var key in obj){
console.log(key); //name age
console.log(obj[key]); //a 20 key相当于一个变量用中括号
}
var arr= [1,2,3,4,5]
for (var v in arr){
console.log(v); //下标 索引 012345
console.log(arr[v]); //下标 索引 012345
}
数组 for forEach() map() filter()
//for循环
var arr = ['a','b','c']
for (var i=0; i<arr.length; i++){
console.log(arr[i]);
}
//forEach()遍历 注意:它没有返回值
var a2 = arr.forEach(function(item,index){
//item == arr[i]
console.log(item);
return item+1 //没有返回值
});
console.log(a2);
var arr3 = [{ id: 1, name: '画画', age: 11 }, { id: 2, name: '画中', age: 12 }, { id: 3, name: '画后', age: 13 }]
var a =[];
var b =[];
var c =[];
arr3.forEach(function(e) {
a.push(e.id)
b.push(e.name)
c.push(e.age)
})
console.log(a,b,c); //(3) [1, 2, 3] (3) ['画画', '画中', '画后'] (3) [11, 12, 13]
//map()遍历
var a3 = arr.map(function(item,index){
//item == arr[i]
console.log(item);
return item+1
});
console.log(a3,arr); //[a1,a2,a3] [a,b,c]
//需要修改
var arr2 = [{id:1,name:'小小',age:15},{id:2,name:'中中',age:15},{id:3,name:'大大',age:15}]
var a4 = arr2.map(function(item){
return item.id || item.name || item.age;
});
console.log(a4); //[1,2,3]
//filter() 数组中的筛选过滤,满足条件的
var arr3 = [1,2,20,300,23];
var a5 = arr3.filter(function(item){
return item > 20
});
console.log(a5); //返回值返回的是数组,满足条件的被返回。[300,23]
// every()检测数组,满足条件返回true 只要有一个没有满足条件就返回false
var arr4 = [1,2,20,300,23];
var a6 = arr4.every(function(item){
return item > 20
});
console.log(a6); //false
// reduce( ) 应用场景用于购物车,累加用得多。
var arr5 = [1,2,3];
var a7 = arr5.reduce(function(total,cur){
return total + cur
},10); //这里的初始值是10
console.log(a7); //16
序列化
前后数据交互,我们不能传对象的。传的是字符串。
分割比较麻烦
JSON.stringify()方法用于将Javascript值转换为Json字符串
var obj = {name:'小红',age:11} console.log(typeof JSON.stringify(obj)); //string
JSON.parse()方法用于将一个JSON字符串转换成为对象
var obj = {name:'小红',age:11} var str = JSON.stringify(obj) console.log(typeof JSON.parse(str)); //Object
深拷贝浅拷贝
举例子:假设B复制A,但修改A时,看B有没有变化,如果B变了,就是浅拷贝,B没有变就是深拷贝。
浅拷贝相当于自己影子,深拷贝相当于双胞长得一样但思想是独立的
var obj = {name:'abc',id:1}
// concat()截取 slice()
var arrr = ['a','b']
var arrr1 = arrr.concat();
arrr1.push('c');
console.log(arrr1); //["a", "b", "c"]
console.log(arrr); //["a", "b"]
var a = {id:1,name:'a',obj:{id:999}};
var b = new Object();
b.name = a.name;
b.id = a.id;
a.name = 'aaaaa'
console.log(b); //{name: "a", id: 1}
console.log(a); //{id: 1, name: "aaaaa", obj: {…}}