数据类型和对象创建
1.数据类型汇总:
万物皆对象
- 基本类型:string number boolean undefined null
- 引用类型:array function object
两者区别:存在形式不同
- 基本类型:以值的形式保存,赋值后即确定,改变其一,另外的值不变
var a1 = 10;
var b1 = a1;
a1 = 9;
console.log(b1); //10
- 引用类型:以地址的形式保存,牵一发而动全身
var obj = {id:100};
var obj2 = obj;
obj.id = 99;
console.log(obj2.id); //99
var obj3 = {};
obj3.id = obj.id;//本质还是一个基本类型赋值的过程
obj.id = 99;
console.log(obj3.id); //100
2.引用数据类型的创建
(1)数组
- 使用Array创建
var arr = new Array();
arr[0]='a';
arr[1]='b';
arr[2]='c';
arr //['a','b','c']
- 简洁的写法
var arr2 = new Array('red','blue','yellow');
- 字面量表示法
var arr3 = ['alice','angela','jack'];
(2)函数
- 函数声明
sum()
function sum(x,y){
return x+y
};
- 函数表达式
var a = function(x,y){
return x+y
};
a()
区别:由于预解析,函数声明可以先调用再声明,函数表达式不行
(3)对象
- 使用Object创建
var person = new Object();
person.name = 'alice';
person['age'] = 20;
person = {
name:'alice',
age:20
}
- 简单字面量
var person2 = {};
person2.name='jack';
person2.action = function(){console.log(this.name)};
person2.action();
- 嵌套字面量
var person3 = {
"name":'angela',
'age':18,
action:function(){
console.log(this.age)
}
};
person3.name;
3.对象的属性和方法
- 设置
var obj = {};
obj.name='amy';
obj['age'] = 20;
- 获取
obj.name;
obj['age'];
这里有个需要注意的地方!
获取的方式有两种:. 和 [ ]的区别
.的后面只能跟对象中的键(不需要加“ ”)
[ ]的后面既能跟键(加“ ”)也可以跟其他变量
var obj = {
name:'amy',
age:20
};
obj.name;
obj['name'];
var n = 'name';
//obj[n] == obj['name'] == obj.name;
- 删除
var o2= {
name:'abc',
age:18
};
delete o2.name;
console.log(o2);
- 检测(判断某属性是否存在)
- in 运算符 检测属性是否存在于某个对象中,自有属性和继承属性都返回true
- hasOwnProperty() 方法用于检测属性是否是自有属性,是则返回true,否则返回false
function Init() {}
Init.prototype.name = 'xyz'; //原型对象
var init = new Init();
init.age = 18;
console.log("name" in init); // true
console.log("age" in init); // true
console.log(init.hasOwnProperty("name")); //false
console.log(init.hasOwnProperty("age")); //true
- 遍历
var obj = {name:'a',age:20};
for(var key in obj){
console.log(key) //name age
console.log(obj[key]) //a 20
};
var arr = ['a','b','c'];
for(var v in arr){
console.log(v) //索引 012345
console.log(arr[v]) //value
}
4.数组的遍历方法
(从上往下的递进关系)
- 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[index]
console.log(item);
return item+1; //没有返回值
});
console.log(a2);//['a','b','c']
- map() 作为回调函数使用,每次得到值和索引,可以有返回值
var a3 = arr.map(function(item,index){ //item == arr[i]
console.log(item);
return item+1;
});
console.log(a3,arr); //[a1,b1,c1] [a,b,c]
var arr2 = [{id:1,name:'a1'},{id:2,name:'a2'},{id:3,name:'a3'}];
var a4 = arr2.map(function(v){ //v == arr2[i]
return v.id
});
console.log(a4); //[1,2,3]
- filter() 作为回调函数使用,每次得到值和索引,可以有返回值(返回值里放筛选条件)
var arr3 = [19,29,21,300,23];
var a5 = arr3.filter(function(item){ //v == arr2[i]
return item>20
});
console.log(a5); //[300,23]
- every() 作为回调函数使用,每次得到值和索引,可以有返回值(返回值里放筛选条件,都满足条件返回true 只要有一个没有满足条件返回false)
var a6= arr3.every(function(item){ //v == arr2[i]
return item>20
});
console.log(a6); //false
- some() 作为回调函数使用,每次得到值和索引,可以有返回值(返回值里放筛选条件,一个满足条件返回true 没有满足条件返回false)
var a6= arr3.some(function(item){ //v == arr2[i]
return item>20
});
console.log(a6); //true
- reduce() 累加器
var arr4 = [1,2,3];
var a7= arr4.reduce(function(total,cur){ //total每次累加后的结果(第一次为0) cur每次遍历取到的一个值
return total+cur
},10);//10为初始值
console.log(a7);
5.序列化
- JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串
var obj = {name:'a',age:20};
console.log(typeof JSON.stringify(obj))
- JSON.parse() 方法用于将一个 JSON 字符串转换为对象
var obj = {name:'a',age:20};
var str = JSON.stringify(obj);
console.log(typeof JSON.parse(str))