js 属性类型之数据属性

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//对象的属性类型
			//对象分为数据属性和访问器属性
			//1、数据属性:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]
			//	Configurable是否可以通过delete删除属性
			//	Enumerable可否for-in
			//	Writable能否修改属性值
			//	Value读取这个属性的数据值
			
			var person = {
				name: "宝清老窖",
			}
			//创建一个person对象,该对象创建了一个名为name的属性,值为“宝清老窖”。
			//也就是说,[[Value]]特性将被设置为“宝清老窖”
			
			//要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()
			//改方法包含三个参数,1、属相所在的对象;2、属性的名字;3一个描述符;
			//其中描述符(descriptor)对象的属性必须是:configurable、enumerable、writable、value
			var person = {};	//writable
			Object.defineProperty(person , "name" , {
				writable: false,
				value: "宝清老窖"
			});
			alert(person.name);		//宝清老窖
			person.name = "金宝清";
			alert(person.name);		//宝清老窖
			
			var person2 = {};	//Configurable
			Object.defineProperty(person2 , "name" , {
				configurable: false,
				value: "宝清老窖"
			});
			alert(person2.name);
			delete person2.name;
			alert(person2.name);
			//当configurable为false的时候,不能用delete删除
			//如果用delete删除,在非严格模式下什么都不会发生,在严格模式下会报错
			
			//一旦把configurable变为false就不能再变回true了,会报错
			var person3 = {};
			Object.defineProperty(person3 , "name" , {
				configurable: false,
				value: "宝清老窖"
			});
			Object.defineProperty(person3 , "name" , {
				configurable: true,			//会报错
				value: "宝清老窖"
			});
			//
		</script>
	</body>
</html>

  提取出js部分

    //对象的属性类型
			//对象分为数据属性和访问器属性
			//1、数据属性:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]
			//	Configurable是否可以通过delete删除属性
			//	Enumerable可否for-in
			//	Writable能否修改属性值
			//	Value读取这个属性的数据值
			
			var person = {
				name: "宝清老窖",
			}
			//创建一个person对象,该对象创建了一个名为name的属性,值为“宝清老窖”。
			//也就是说,[[Value]]特性将被设置为“宝清老窖”
			
			//要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()
			//改方法包含三个参数,1、属相所在的对象;2、属性的名字;3一个描述符;
			//其中描述符(descriptor)对象的属性必须是:configurable、enumerable、writable、value
			var person = {};	//writable
			Object.defineProperty(person , "name" , {
				writable: false,
				value: "宝清老窖"
			});
			alert(person.name);		//宝清老窖
			person.name = "金宝清";
			alert(person.name);		//宝清老窖
			
			var person2 = {};	//Configurable
			Object.defineProperty(person2 , "name" , {
				configurable: false,
				value: "宝清老窖"
			});
			alert(person2.name);
			delete person2.name;
			alert(person2.name);
			//当configurable为false的时候,不能用delete删除
			//如果用delete删除,在非严格模式下什么都不会发生,在严格模式下会报错
			
			//一旦把configurable变为false就不能再变回true了,会报错
			var person3 = {};
			Object.defineProperty(person3 , "name" , {
				configurable: false,
				value: "宝清老窖"
			});
			Object.defineProperty(person3 , "name" , {
				configurable: true,			//会报错
				value: "宝清老窖"
			});
			//            

  

原文地址:https://www.cnblogs.com/xudy/p/5417151.html