Javascript初级 JavaScript进阶

JavaScript内建对象



JavaScript中得对象分类——内建对象


定义


Object是Javascript中所有对象的父级对象,我们创建的所有对象都继承于此,包括内建对象


语法


new Object([value])

{name:value,name:value...}


描述


Object 构造函数为给定的值创建一个对象包装。如果给定值是  null or undefined,将会创建并返回一个空对象,否则,将返回一个与给定值对应类型的对象。

当以非构造函数形式被调用时,Object 等同于 new Object()。



属性


Object.prototype:可以为所有Object类型的对象添加属性



Object.create()


指定原型对象和属性创建一个对象


语法:


Object.create(proto,[propertiesObject])


参数:


proto:一个对象,作为新创建对象的原型

propertiesObject:一个对象值,可以包含若干个属性,属性名称为新建对象的属性名,属性值为那个属性的属性描述对象。

Object.defineProperty():给对象添加/修改一个属性并指定该属性的配置



Object.defineProperty()


语法:


Object.defineProperty(obj,prop,descriptor)


参数:


obj:需要定义的对象

prop:需要定义或修改的属性名

descriptor:属性定义或修改的属性的描述


描述:


该方法允许精确添加或修改对象的属性。正常的属性添加通过赋值来创建并显示在属性枚举中(for...in 循环 或 Object.keys 方法), 这种方式添加的属性值可能被改变,也可能会被 删除。该方法允许改变这些额外细节的默认设置。

对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;

数据描述符和存取描述符均具有以下可选键值

configureable:当且仅当这个属性描述符值为 true 时,该属性可能会改变,也可能会被从相应的对象删除。默认为 false。

enumerable:true 当且仅当该属性出现在相应的对象枚举属性中。默认为 false。

value:与属性有关的值。可以是任何有效的Javascript值。默认为undefined

writable:true当且仅当可能用赋值运算符改变与属性相关的值。默认为false

存取描述同时具有以下可选键值:

get:一个给属性提供getter的方法,如果没有getter则为undefined。方法将返回作用属性的值,默认为undefined

set:一个给属性提供setter的方法,如果没有setter则为undefined。该方法将受到作为唯一参数的新值分配给属性。默认为undefined


注意:


这些选项不一定是自身属性,如果是继承来的也要考虑。为了确认保留这些默认值,你可能要在这之前冻结 Object.prototype,明确指定所有的选项,或者将 __proto__ 属性指向空。



Object.defineProperties()


在一个对象上添加或修改一个或者多个自有属性,并返回该对象。


语法:


Object.defineProperities(obj,props)


参数:


obj:将要被添加属性或修改属性的对象

props:该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置

Object.keys():方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是for-in还会遍历除一个对象从其原型链上继承到得可枚举的属性)



Object.keys()


语法:


Object.keys(obj)


参数:


返回该对象的所有可枚举自身属性的属性名


描述:


Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的对象上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。

如果你想获取一个对象的所有属性,,甚至包括不可枚举的,可以通过Object.getOwnPropertyNames()实现

Object.getOwnPropertyNames():返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组


示例代码:


javascript1.png 


执行结果:


javascript2.png 

 

示例代码:


javascript3.png 


执行结果:


javascript4.png 


示例代码:


javascript5.png 


执行结果:


javascript6.png 


如果想获取一个对象的所有属性,包括不可枚举的,示例代码:


javascript7.png 

javascript8.png 


执行结果:


javascript9.png 

javascript10.png 



Object.getOwnPropertyNames()


语法:


Object.getOwnPropertyNames(obj)


参数:


obj:要查看的对象


描述:


Object.getOwnPropertyNames 返回一个数组,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串

数组中枚举属性的顺序与通过 for...in loop(或 Object.keys))迭代该对象属性时一致。 数组中不可枚举属性的顺序未定义。

Object.getOwnPropertyDescriptor():返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性))

示例代码:


javascript11.png 


执行结果:


javascript12.png 


示例代码:


javascript13.png 


执行结果:


javascript14.png 


示例代码:


javascript15.png 


执行结果:


javascript16.png 



Object.getOwnPropertyDescriptor()

语法:


Object.getOwnPropertyDescriptor(obj,prop)


参数:


obj:在该对象上查看属性

prop:一个属性名称,该属性的属性描述被返回


返回值:


如果指定的属性存在于对象上,则返回其属性描述符(property descriptor),否则返回 undefined


描述:


该方法允许对一个属性的描述进行检索。在 Javascript 中, 属性 由一个字符串类型的“名字”(name)和一个“属性描述符”(property descriptor)对象构成

一个属性描述符是一个记录

Object.getPrototypeOf():返回指定对象的原型(也就是该对象内部属性[[Prototype]]的值)



Object.getPrototypeOf()


语法:


Object.getPrototypeOf(obj)


参数:


要返回的对象


描述:


如果参数不是一个对象类型,将跑出TypeError异常



Object.freeze()


冻结一个对象。冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说这个对象永远不能改变的。


语法:


Object.freeze(obj)


参数:


bj:要被冻结的对象


描述:


冻结对象的所有自身属性都不可能以任何方式被修改。任何尝试修改该对象的操作都会失败,可能是静默失败,也可能会抛出异常(严格模式中)

数据属性的值不可更改,访问器属性(有getter和setter)也同样(但由于是函数调用,给人的错觉是还是可以修改这个属性)。如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。



Object.isFrozen()


判断对象是否已经被冻结


语法:


Object.isFrozen(obj)


参数:


obj:被检测的对象


描述:


一个对象是冻结的(frozen)是指它不可扩展,所有属性都是不可配置的(non-configurable),且所有数据属性(data properties)都是不可写的(non-writable)

数据属性是值那些没有取值器(getter)或赋值器(setter)的属性。



Object.preventExtensions()


阻止对象扩展


语法:


Object.preventExtensions(obj)


参数:


obj:将要变得不可扩展的对象


描述:


如果一个对象可以添加新的属性,则这个对象是可扩展的。preventExtensions 可以让这个对象变的不可扩展,也就是不能再有新的属性。

需要注意的是不可扩展的对象的属性通常仍然可以被删除

尝试给一个不可扩展对象添加新属性的操作将会失败,不过可能是静默失败,也可能会抛出 TypeError 异常(严格模式)。



Object.isExtensible()


检测一个对象是否可扩展(是否可以在它上面添加新的属性)


语法;


Object.isExtensible(obj)


参数:


obj:需要检测的对象


描述:


默认情况下,对象是可扩展的:即可以为他们添加新的属性。以及它们的 __proto__  属性可以被更改。


Object.preventExtensions,Object.seal 或 Object.freeze 方法都可以标记一个对象为不可扩展(non-extensible)。



Object.seal()


可以让一个对象密封,并返回被密封之后的对象。密封对象是指那些不能添加新的属性、不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象

语法:


Object.seal(obj)


参数:


obj:要被密封的对象


描述:


通常情况下,一个对象是可扩展的(可以添加新的属性)

密封一个对象会让这个对象变的不能添加新属性,且所有已有属性会变的不可配置。

属性不可配置的效果就是属性变的不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。

但属性的值仍然可以修改。尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError 异常(严格模式)。

不会影响从原型链上继承的属性。但 __proto__ (  ) 属性的值也会不能修改。



Object.isSealed()


检测一个对象是否被密封sealed


语法:


Object.isSealed(obj)


参数:


obj:要被检测的对象


描述:


如果这个对象是密封的,则返回 true,否则返回 false。

密封对象是指那些不可 扩展 的,且所有自身属性都不可配置的(non-configurable)对象。

 


【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

您有一个双11钜惠红包未领取

客服热线 400-862-8862

回到顶部