对象(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 通过Objectvar 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>