JS基础3

2018-10-23  本文已影响0人  pp_5793

Object对象

(1)Object()(注意O是大写的)本身是一个工具函数,它可以将任意值转换为对象,
var obj=Object();
var obj=Object(undefined);
var obj=Object(null);
console.log(obj instanceof Object);
//输出为true

在以上代码中Object()是把obj转成一个空的对象,相当于是Undefinednull的,最后一行我们用instanceof来验证看obj对象是否为Object()的一个实例,如果是返回true,如果不是返回false
如果返回参数是原始对象的值,则会返回其数值类型所对应的实例。

var obj=Object(1);
console.log(obj instanceof Object);
console.log(obj instanceof Number);
var obj=Object('cool');
console.log(obj instanceof Object);
console.log(obj instanceof String);
var obj=Object(true);
console.log(obj instanceof Object);
console.log(obj instanceof Boolean);
//(返回了六个true)

如果其参数是一个对象,则直接返回对象值。
Object()方法还可以用来构造函数,即使用new创造一个新得对象:

var obj= new Object();

上面这句话还可以这样写:

var obj={};

(2)Object()的静态方法:本身自带的方法

Object()有很多静态方法比如这一对:key()getOwnPropertyNames(),他们两者的区别如下所示:

var obj=['a','b'];
console.log(Object.getOwnPropertyNames(obj));
console.log(Object.keys(obj));
//返回['0','1','length']
//返回['0','1']

从一以上代码我们可以看出,keys()方法返回的是可以枚举的属性 ,但是呢,getOwnPropertyNames()方法它就变态了,它还返回了不可枚举的属性length.
利用这。两个方法我们还可以返回属性的个数:


var obj=['a','b'];
console.log(Object.getOwnPropertyNames(obj).length);
console.log(Object.keys(obj).length);
//输出为3       2
var  obj={
p1:'udsfo',
p2:'hfuid'};
console.log(Object.getOwnPropertyNames(obj).length);
console.log(Object.getOwnPropertyNames(obj).length);
//输出为2       2

Object()还有很多静态方法:

Object.isExtensible(obj)//判断对象是否 可以拓展
Object.getOwnPropertyNames(obj)//获取某个属性的描述
Object.defineProperty(obj)//通过描述对象那个,定义某个属性
Object.defineproperries(obj)//通过描述对象,定义多个属性
Object.preventExtensions(obj)//防止对象扩展
Object.seal(obj)//禁止对象配置

Object.isSealed(obj)//判断啊一个对象是否可以配置
Object.freeze(obj)//冻结一个对象
Object.isFrozen(obj)//判断一个对象是否被冻结
Object.create(obj)//该方法可以指定原型对象和属性,返回一个新的对象

Object.getPrototypeOf(obj)//获取对象的Prototype对象

(3)Object()对象的实例方法(定义在Object.prototype()上的方法)

Obect.protopyte.valueOf()

var obj=new Object();
obj.valueOf=function(){
    return 2;
};
console.log(1+obj);
//输出3
Object.protopyte.toString()

这个方法一般可以用来判断数据的类型:

var obj={};
console.log(obj.toString());
//输出为[object Object]

注意两个输出第一个为小写的object表示一个恐惧感对象。第二个一个大写的Object表示该值的构造函数。
不顾哦我恩一般都直接用Object.prototype.toString.call(value);来查看这个value的类型,数值返回[object Numbers],NULL型返回[object Null],数组的话返回[object Array]等。

Object.protopyte.toLocaletoString()
var date=new Date();
console.log(date.toString());
console.log(date.toLocaleString());
//输出结果为:Tue Oct 23 2018 13:21:40 GMT+0800 (GMT+08:00)
//2018-10-23 13:21:40

从上面的输出结果个人觉得toString()更详细呢,额,但是文档上还补充说toLocaletoString还和地域有关系,真的是厉害了我的天。

Object..protopyte.protopyte.toString()

这个方法是用来判断对象的属性是否为其自身的属性,并返回对应的布尔值。

var obj={
    p:132
};
console.log(obj.hasOwnProperty('p'));
console.log(obj.hasOwnProperty('toString'));
//返回 true false
补充:一个关于闭包的解释:

在javascript中,我们在使用函数的内部变量时,可以取到外部变量。而当我们想在外部取得内部变量时,则需要闭包来解决,同时,我们有时候需要不让内部变量受到外部变量的“污染“,也需要闭包的使用,以下是简单的代码来帮助我们理解:

function parent(){
      function child(){
              var i=100;
              return i;
}
     return child();
}
console.log(parent());//输出100

以上代码我们可以看出闭包child()可以帮助我们在外部使用内部的变量i,闭包通常是函数里面套函数的形式。

var arr=[];
for(var i=0;i<3;i++){
    arr[i]=(function (i){
        {
           console.log(i);
        }
        
    })(i);
}
console.log(arr[i]);
//输出为0 1 2 

对以上代码给出解释如下,首先定义一个全局变量数组arr,再定义一个全局变量i,让i做自增运算,到3,再把一个传参的函数赋值给arr[]数组,就可以让console,log(i)分别取得每个i的值,注意我们这里用到了在基础2中所提到的立即执行的函数表达式(IIFE),对console.log(i)进行了立即执行的操作。最后输出arr[i]
`

上一篇下一篇

猜你喜欢

热点阅读