JS中的数据类型:String字符串,Number数值,Boolean布尔值,Null空值,Undefined未定义
以上这五种数据类型属于基本数据类型,以后我看到的值只要不是上边五种,全都是对象
object 对象
基本数据类型都是单一的值“hello”123 true 值和值之间没有任何联系
在JS中表示一个人的信息(name gender age)
var name=“孙悟空”
var gender=“男”
var age=18
如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体。
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性
对象的分类:1.内建对象 -由ES标准中定义的对象,在任何的ES的实现中都可以使用 -比如:Math String Number Boolean Function Object……
2.宿主对象 -由JS的运行环境提供的对象,目前来讲主要是指由浏览器提供的对象 -比如BOM DOM
3.自定义对象 -由开发人员自己创建的对象
对象的基本操作:
// 创建对象
// 使用new关键字调用的函数,是构造函数constructor
// 构造函数是专门用来创建对象的函数
var obj=new Object();
// 使用typeof检查一个对象时,会返回object
// console.log(typeof obj);
// 在对象中保存的值称为属性
// 向对象添加属性
// 语法:对象.属性名=属性值
// 向obj中添加一个name属性
obj.name="孙悟空";
// 向obj中添加一个gender属性
obj.gender="男";
// 向obj中添加一个age属性
obj.age="18";
// 读取对象那个中的属性
// 语法:对象.属性名
// 如果读取对象中没有的属性,不会报错会返回undefined
console.log(obj.name);
// 修改对象的属性值
// 语法:对象.属性名=新值
obj.name="tom";
// 删除对象的属性
// 语法:delete 对象.属性名
delete obj.name;
属性名和属性值
属性名:对象的属性名不强制要求遵守标识符的规范,什么乱七八糟的名字都可以使用
但是我们使用是还是尽量按照标识符的规范去做
如果要使用特殊的属性名,不能采用.的方式来操作,需要使用另一种方式
语法: 对象["属性名"]=属性值
var obj=new Object();
obj.name="孙悟空";
obj["123"]=789;
读取时也需要采用这种方式
使用[ ]这种形式去操作属性,更加的灵活,在[ ]中可以直接传递一个变量,这样变量值是多少就会读取那个属性
var obj=new Object();
obj["123"]=789;
var n="123";
console.log(obj[n]);
输出结果是“789”
属性值
JS对象的属性值,可以是任意的数据类型,甚至也可以是一个对象。
var obj=new Object();
obj.test=true;
obj.test=null;
obj.test=undefined;
//console.log(obj.test);
//创建一个对象
var obj2=new Object();
obj2.name="猪八戒";
//将obj2设置为obj的属性
obj.test=obj;
console.log(obj.test);
console.log(obj.test.name);
第一个输出obj2对象,第二个输出猪八戒
in 运算符:通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有则返回false
语法: “属性名” in 对象
//检查obj中是否含有test2属性
console.log("test2" in obj);
基本数据类型
String字符串,Number数值,Boolean布尔值,Null空值,Undefined未定义
引用数据类型 :Object
JS中的变量都是保存在栈内存中,基本数据类型的值直接在栈内存中储存,
值与值之间是独立存在的,修改一个变量不会影响其他变量
引用数据类型(对象)是保存到堆内存中的,每创建一个新对象,就会在对内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响
当比较两个基本数据类型的值时,就是比较值
而比较两个引用数据类型时,它是比较的对象的内存地址,如果两个对象那个是一模一样的,但是地址不同,它也会返回false
对象字面量
//创建一个对象
//var obj =new Object( );
//使用对象字面量来创建一个对象
var obj={ };
//console.log(typeof obj);
obj.name="孙悟空";
//console.log(obj.name);
//使用对象字面量,可以在创建对象时,直接指定对象中的属性
//语法: {属性名:属性值,属性名:属性值....}
//对象字面量的属性名可以加引号也可以不加,建议不加
//如果要使用一些特殊的名字,则必须加引号
//属性名和属性值是一组一组的名值对结构
//名和值之间使用:链接,多个名值对之间使用,隔开
//如果一个属性值之后没有其他的属性了,就不用写了
var obj2={
name:"猪八戒",
gender:"男",
test:{name:"沙和尚"}
};
console.log(obj2);
使用工厂方法创建对象
原始的
//创建一个对象
var obj={
name:"孙悟空",
age:"18",
gender:"男",
sayName:function(){
alert(this.name);
}
};
var obj2={
name:"猪八戒",
age:"28",
gender:"男",
sayName:function(){
alert(this.name);
}
};
var obj3={
name:"沙和尚",
age:"38",
gender:"男",
sayName:function(){
alert(this.name);
}
};
obj2.sayName();
是工厂方法创造对象
var obj={
name:"孙悟空",
age:"18",
gender:"男",
sayName:function(){
alert(this.name);
}
};
//使用工厂方法创造对象
/*通过该方法可以大批量的创建对象*/
function createPerson(name,age,gender){
//创建一个新对象
var obj=new Object();
//向对象中添加属性
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.sayName=function(){
alert(this.name);
};
//将新对象返回
return obj;
}
var obj2=createPerson("孙悟空",18,"男");
var obj3=createPerson("白骨精",28,"女");
var obj4=createPerson("猪八戒",18,"男");
obj3.sayName();