JS基础3

作者: pp_5793 | 来源:发表于2018-10-23 21:31 被阅读0次

    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]
    `

    相关文章

      网友评论

          本文标题:JS基础3

          本文链接:https://www.haomeiwen.com/subject/dednzftx.html