JavaScript之Object()对象

1.JavaScript的所有的其他对象都继承自Object对象,也就是说哪些对象都是Object的实例。
2.Object对象原生的方法:Object本身的方法和Object的实例方法。
(1)Object对象本身的方法(直接定义在Object对象的方法)
(下面的print方法就是直接的定义在Object对象上的方法(调用print方法即可启动网页的打印功能))

Object.print=function (o){
       console.log(o);
    };

(2)Object的实例方法(定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用)

   Object.prototype.print = function () {
        console.log(this);
    };
    var obj = new Object();
    obj.print();  //Object
    //obj是Object的实例对象,那么obj直接继承了Object.prototype
    //的属性和方法,所以obj可以直接调用print方法

3.Object()
Object本身就是一个函数,可以被当作工具方法使用,将人一直转为对象,这种方法常用于保证某个值一定是对象。
1.如果参数为空(underfunded和null),Object()返回一个空对象,

 var obj=Object();
// obj instanceof Object  //true
    var obj01=Object(undefined);
    var obj02=Object(null);
    console.log(obj01 instanceof  Object); //true
    console.log(obj02  instanceof  Object); //true

underfunded和null转为对象,得到了一个空对象obj;
instanceof运算符用来验证一个对象是否为指定构造函数的实例,true表示obj就是Object的实例

2.如果参数是原始类型里面的值,Object方法将其转为对应的包装对象的实例。
(在此只实验一种对象类型 字符串类型)

var obj=Object('fhh');
console.log(obj instanceof Object);  //true
console.log(obj instanceof String);    //true

3.如果Object方法的参数就是一个对象,他总是返回该对象,即不用转换,(===是数值和数据类型都相等)


var  arr=[];
var  obj=Object(arr);
console.log(obj===arr);  //true


 var  arr=[];
 var  obj=Object(arr);
 console.log(obj===arr);  //true
//利用这种特点可以写一个判断变量是否为对象的函数
  function isObject(value) {
        return value === Object(value);
    }

    console.log(isObject([]));  //true
    console.log(isObject(true)); //false

4.Object构造函数
(构造函数的意思就是前面可以使用new命令) 主要用途就是用它来生成一个新对象(构造函数的用法和前面的方法几乎一样,)

var obj=new Object();
不同之处在于:
Object(Value):表示将value转成一个对象
new Object(value):表示生成一个对象 它的值是value

5.Object的静态方法
(静态方法就是Object对象自身的方法)
5.1Object.keysObject.getOwnPropertyNames 方法都用来遍历对象的属性。
Object.keys方法的参数是一个对象,返回一个数组,该数组的成员都是该对象自身的(不是继承)所有属性名。Object.getOwnPropertyNames 也是一样的用法,《详细见JavaScript之对象》
不同点
对于不可枚举类型的属性,只有Object.getOwnPropertyNames 方法可以返回,
Object.keys方法只可以返回可枚举的属性。

  var a=['hello','world'];
console.log(  Object.keys(a));  //{'0','1'}
console.log(Object.getOwnPropertyNames(a));//{'0','1','length'}
其中length属性就是不可枚举的类型,所有只出现后者方法里面

5.2计算对象属性个数的方法

var  obj={
    p1:123,
    p2:234
};
Object.getOwnPropertyNames(obj).length; //2
console.log(Object.keys(obj).length); //2

5.3其他静态方法
详细见教程后文

6.Object的实例方法

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

6.1Object.prototype.valueOf()
作用为返回一个对象的”值”,默认情况下返回对象本身。

var obj=new Object();
console.log(obj.valueOf()===obj);

valueOf方法的主要用途是,JavaScript 自动类型转换时会默认调用这个方法()

//未赋值的状态
var  obj=new Object();
console.log(obj+1);  //[object Object]1

//给对象赋值
var  obj=new Object(1);
console.log(obj+1);  //2


//自定义的valueOf方法,输出返回值3
 console.log(1+obj); //4
var obj=new Object();
obj.valueOf=function () {
    return 3;
};

6.2Object.prototype.toString()返回一个对象的字符串形式。该字符串说明了对象的类型(用处不大)

 var o1=new Object();
 console.log(o1.toString()); //[object Object]

 var o2={a:1};
 console.log(o2.toString());  //[object Object]

通过自定义toString方法,可以让对象在自动类型转换时,得到想要的字符串形式。


 var obj=new Object();
//自定义的toString方法  返回一个字符串hello
 obj.toString=function () {
     return 'hello';
 };
 //调用
 console.log(obj+' '+'world');// hello  world

(数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法。)


console.log([1,2,3].toString());// "1,2,3"   数组

    console.log('123'.toString()) ;  //"123" 字符串

   console.log( (function () {
       return 123;
   }).toString());
   /*function () {
       return 123;    函数
   }*/
console.log((new Date()).toString());
//Wed Apr 18 2018 13:30:11 GMT+0800

6.3toString的应用:判断数据类型(判断一个值的类型)(因为实例对象可以自定义toString方法,覆盖Object.prototype.toString方法,所以为了得到类型字符串,可以直接使用Object.prototype.toString)

var obj={};
 console.log(obj.toString()); //[object Object]
 //通过函数的call方法,可以在任意值上调用这个方法,来判断值的数据类型
console.log(Object.prototype.toString.call(2)); //[object Number]
console.log(Object.prototype.toString.call('hello')); //[object String]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined] 

6.4Object.prototype.toLocaleString()
返回一个值的字符串形式
(这个方法的主要作用是留出一个接口,让各种不同的对象实现自己版本的toLocaleString,用来返回针对某些地域的特定的值。目前,主要有三个对象自定义了toLocaleString方法。)

var date=new Date();
console.log(date.toString()); //Wed Apr 18 2018 13:54:07 GMT+0800
console.log(date.toLocaleString()); //2018/4/18 下午1:54:07

6.5Object.prototype.hasOwnProperty()接受一个字符串为参数,返回一个布尔值,表示该实例对象是否具有该属性。

var obj = {
  p: 123
};

obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false
//p是obj对象本身的属性  所以返回true

谢谢!!

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值