对象(object)
一 js中对象:
内置对象:Math RegExp Date Array String Function ...
宿主对象: DOM BOM
自定义对象:
二 原始数据类型:基本类型、引用类型
基本类型:number string null undefined boolean
引用类型:Object Math RegExp Date Array Function
基本包装类型:String Number Boolean
内存:堆、栈
基本类型的数据是存放在栈当中的
引用类型和基本包装类型是存放在堆当中的
ps:基本类型按值访问的,引用类型和基本包装类型是按址(指针)访问的
三 对象(Object)
一)定义:无序属性的集合
1 通过Object
var obj=new Object();
obj.name='小黑';
obj.age=20;
obj.info=function(){
console.log(this.name+'----'+this.age);
};
obj.info();
2 对象字面量
var obj={
name:'小黑',
age:20,
info:function(){
console.log(this.name+'----'+this.age);
}
};
obj.info();
二)属性的分类
1 数据属性
[[configurable]]:表示能否使用delete操作符删除从而重新定义,或能否修改为访问器属性。默认为true;
[[enumberable]]:表示是否可以在 for...in 循环和 Object.keys() 中被枚举。默认true;
<script>
//定义对象--对象字面量(通过键值对的方式)
/*
1 属性和属性值是用键值对的方便表达
2 函数里面的this指向的是obj
*/
var obj={
name:'小黑',
age:20,
info:function(){
console.log(this.name+'----'+this.age);
}
};
//删除对象的属性
// delete obj.name;
// obj.name=undefined;
// console.log(obj.name);
Object.defineProperty(obj,'name',{
configurable:false,
enumerable:false,
value:'花花'
});
delete obj.name;
console.log(obj.name);
for(var i in obj){
console.log(i,obj[i]);
}
//返回对象的所有键名的集合
var arr=Object.keys(obj);
console.log(arr[0]);
//属性的内部特性所设的值优先级要大于定义时属性值
obj.name='小黑';
console.log(obj.name);
</script>
[[writable]]:表示是否可修改属性的值。默认true;
[[value]]:包含该属性的数据值。读取/写入都是该值。
2 访问器属性
[[configurable]]:是否可通过delete操作符删除重新定义属性;
[[enumberable]]:是否可通过for-in循环查找该属性;
[[set]]:写入(设置)属性时调用函数,默认:undefined;一旦属性被访问读取,此方法被自动调用。
[[get]]:读取(获取)属性时调用函数,默认:undefined;一旦属性被重新赋值,此方法被自动调用。
<script>
//定义对象--对象字面量(通过键值对的方式)
/*1 属性和属性值是用键值对的方便表达
2 函数里面的this指向的是obj*/
var obj={
name:'小黑',
age:20,
info:function(){
console.log(this.name+'----'+this.age);
}
};
var temp='';
Object.defineProperty(obj,'name',{
configurable:false,
enumerable:false,
//设置时可以通过注入形参的方式来拿到你设置的值
set:function(v){
console.log(v);
temp=v;
console.error('我被设置了,这是一个非法操作');
},
//获取时不能通过注入形参方式拿到你所设置的值
get:function(){
return temp;
console.log('我被使用了');
}
});
obj.name='花花1';
//
console.log(obj.name);
</script>