了解JavaScript 对象属性的标签

时间:2023-03-09 04:05:17
了解JavaScript 对象属性的标签

  对象属性的标签

  value(属性值), writable(属性可写), enumerable(属性可枚举), configurable(属性可配置), 这些属性标签使对象所持有的属性体现出不同的特性, 以便开发者开发使用.

  value

  value, 属性的值, 这个属性是最直观的体现, 一个属性我们使用的就是它的值, 这个值的类型可以是对象, 字符串, 值等任意类型. 如果未设置的话, 值会是undefined.

  Object.defineProperty(person, 'name', {

    configurable : false,

    writable : false,

    enumerable : true,

    value : "Jianwei Wang"

  });

  document.write(person.name);  //Jianwei Wang

  "Jianwei Wang"就是person.name的值.

  configurable

  confirurable, 顾名思义可配置的, 意思就是在标签为true时这个属性允许修改各种属性标签配置(true or false), delete关键字是否可以删除这个属性, 如果标签为false, 那么是不允许修改标签配置的, delete也不可以使用了. 它的作用主要是配置属性的标签.

  writable

  writable, 可写入的, 如果这个设置为false, 那么这个属性将不允许写入, 也就无法将writable设置为新的值.

  代码演示, 可写与可配置的特性.

 <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
//声明一个对象并初始化
var person = {
name : "wang",
age : 23
};
//定义一个key为hobby的属性, 设置为不可配置, 值为eat.
//未设置的标签值默认为false, 所以这个属性是不允许配置, 枚举, 以及写入的.
Object.defineProperty(person, 'hobby', {
value : "eat"
});
person.hobby = "run"; //写入属性为run
document.write(person.hobby); //eat, 说明写入失败
Object.defineProperty(person, 'hobby', {
writable : true
}); //对属性进行重新配置, 发现出错, 不允许重新配置可写入.
</script>
</body>
</html>

  enumerable

  enumerable, 可枚举的, 如果将其关闭, 那么这个属性将不会被遍历出来. 所以那些用于属性遍历的方法就都不是很好用了(for in, Object.keys等), 检测还是可以的(in, hasOwnProperty等). 所以总结起来就是enumerable关闭后的作用就是, 让你知道我有, 但是就是不给你看.

 <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb18030">
<title></title>
<script type="text/javascript">
var person = {
name : "Jianwei Wang",
age : 23
}; //声明并初始化对象
Object.defineProperty(person, "gender", {
configurable : true,
enumerable : true,
value : "male"
}); //配置一个新的属性gender, 设置为可配置, 可枚举的, 值为male
document.write(Object.keys(person) + "<br />"); //name, age, gender
Object.defineProperty(person, "gender", {
enumerable : false,
}); //重新配置gender为不可枚举属性.
document.write(Object.keys(person) + "<br />"); //name, age
document.write("gender" in person); //true
</script>
</head>
<body>
</body>
</html>