欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Javascript对象

程序员文章站 2022-04-24 23:13:23
...

来源于慕课网课程 JavaScript深入浅出

对象结构介绍

Javascript对象

说明:
1. javascript对象中的每个属性有很多属性标签和方法,比如:writable, enumerable, configurable, value, get/set
2. 每个对象都有与之相关的对象标签:原型([[proto]]), 类([[class]])和可扩展性([[extensible]])


属性标签说明:

Object.getOwnPropertyDescriptor({pro:true}, 'pro'};
// Object{value:true, writable:true, enumerable:true, configurable:true}

writable: 如果为false, 则赋值失效
configurable: 如果为false, 则delete失效
enumerable: 如果为false, 则使用for.. in 不可迭代

举例说明:

var person = {}
Object.defineProperty(person, 'name', {
    configurable: false,
    writable:false,
    enumerable: false,
    value: 'Bosn Ma'
    });
> person.name  // Bosn Ma
> person.name = 1
> person.name  //仍然是Bosn Ma,赋值为1无效,因为writable为false
> delete person.name  // false, 无效因为configurable为false
> Object.keys(person)  // [], 因为enumerable为false

Javascript对象


对象标签

  1. 原型标签proto
    obj > Object.prototype > null

  2. class标签:表示对象的类型信息,通过Object.prototype.toString()方法查询

var toString = Object.prototype.toString;
function getType(o){
    return toString.call(o).slice(8, -1);
    };
> toString.call(null); // "[object Null]"
> getType(null); // "Null"
> getType(undefined); // "Undefined"
> getType(1); // "Number"
> getType(new Number(1)); "Number" 这是因为Object.prototype.toString.call方法,首先将o转换成相应的对象,然后在判断类型,因此传入字面量"1""new Number(1)",结果是一样的
> typeof new Number(1) //"object"
> getType(true); // "Boolean"
> getType(new Boolean(true)); // "Boolean"
  1. extensible标签:对象的属性是否可以添加
var obj={x:1, y:2}
Object.isExtensible(obj); //true
Object.preventExtensions(obj);
Object.isExtensible(obj); // false
obj.z=1;
obj.z;  // undefined, add new property failed
Object.getOwnPropertyDescriptor(obj, 'x');  // Object {value: 1, writable: true, enumerable: true, configurable: true}

Object.seal(obj);
Object.getOwnPropertyDescriptor(obj, 'x'); // Object {value: 1, writable: true, enumerable: true, configurable: false}
Object.isSealed(obj); // true

Object.freeze(obj);
Object.getOwnPropertyDescriptor(obj, 'x'); // Object {value: 1, writable: false, enumerable: true, configurable: false}
Object.isFrozen(obj); // true