JavaScript/标准库/Object

本文介绍了JavaScript中Object对象的基础知识,包括其静态方法与实例方法的区别,如何使用Object构造函数及Object()函数,同时还深入探讨了Object.prototype上的实例方法。

感谢阮一峰

概览

JavaScript 原生提供Object对象(注意起首的O是大写)。

JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。

Object对象的原生方法分成两类:Object本身的静态方法与Object的实例方法。

  • 静态方法:

    Object.print = function(a){
         console.log(a);
       };
    
  • 实例方法:

    所谓实例方法就是定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用。 这段话对于新手来说很不直观,下面的代码可以很好的帮助理解:
     Object.prototype.print = function(){
        console.log(this);
      };
      var a = [1,2,3];
      a.print();

    这里注意两段代码的区别(参数,this)

Object()与Object构造函数

Object()
Object本身就是一个函数,用于将任意值转换为对象。这个方法常用于保证某个值一定是对象。

   var obj = Object();
   var obj2 = Object(null);
   var obj3 = Object(undefined); 

obj1,obj2,obj3都是空对象。 如果Object的参数是一个对象类型,则会直接返回这个对象,不经过转换。 因此可以写一个判断变量是否为对象类型的函数。

   var isObjectClass = function(variable){
     return variable === Object(variable);
   }

Object构造函数

   var obj = new Object();

虽然用法相似,但是Object(value)与new Object(value)两者的语义是不同的,Object(value)表示将value转成一个对象,new Object(value)则表示新生成一个对象,它的值是value。

Object静态方法

只是简单的介绍
Object.keys()

var obj = {
  p1: 123,
  p2: 456
};
Object.keys(obj) // ["p1", "p2"]

Object.getOwnPropertyNames()
用法与上述类似,区别是
Object.getOwnPropertyNames方法还返回不可枚举的属性名。

var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

Object实例方法

定义在Object.prototype上的方法称为实例方法,所有Object实例对象都继承这些方法。
*Object实例对象的方法,主要有以下六个:

Object.prototype.valueOf()//返回当前对象对应的值。
Object.prototype.toString()//返回当前对象对应的字符串形式。
Object.prototype.toLocaleString()//返回当前对象对应的本地字符串形式。
Object.prototype.hasOwnProperty()//判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
Object.prototype.isPrototypeOf()//判断当前对象是否为另一个对象的原型。
Object.prototype.propertyIsEnumerable()//判断某个属性是否可枚举。

对于Object.prototype.toString()方法
数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法,并不会返回[object Object],因为它们都自定义了toString方法,覆盖原始方法。
Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。代码如下:

Object.prototype.toString.call('123');//[object String]
Object.prototype.toString.call([1,2,3]);//[object Array]

很巧妙的一个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值