zoukankan      html  css  js  c++  java
  • 对象常用方法

    更多见:lodash

    1、获取对象的类型

    function classof(o){
        if(o === null) return "NULL";
        if(o === undefined) return "Undefined";
        return Object.prototype.toString.call(o).slice(8,-1);
    }
    classof(
    1); // "Number" classof(''); // "String" classof(false); // "Boolean" classof([1,2,3,4]); // "Array" classof({a:1}); // "Object" classof(function a (){}); // "Function" classof(new Date); // "Date" classof(null); // "NULL" classof(undefined); // "Undefined" classof(window); // "Window" classof(/./); // "RegExp"

     

    2、序列化对象

         对象序列化:指将对象的状态转为字符串,也可以将字符串还原为对象。

         ECMAScript 5 提供了内置函数 JSON.stringify()  和 JSON.parse() 用来序列化和还原js对象。

          注意:

             1-     JSON 是JS语法的子集,不能表示JS里面的所有值。支持对象、数组、字符串、无穷大数字、true、false和null,并且他们可以序列化和还原

             2-    JSON.stringify()  只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化之后输出的字符串中,会将这个属性省略掉。

             3-     NaN、 Infinity 、- Infinity 序列化的结果是null。

             4-     函数、RegExp、Error对象和undefined值  不能序列化和还原。

     3、对象方法----toString()方法等

            toString()方法 没有参数,他将返回一个表示调用这个方法的对象值的字符串。

    var a = {a:1};
    var s = [1,2,3,4];
    var d = new Date;
    var f = false;
    var n = 1;
    
    a.toString();  //  "[object Object]"
    s.toString();  //  "1,2,3,4"
    d.toString();  //  "Tue Jan 23 2018 17:56:34 GMT+0800 (中国标准时间)"
    f.toString();  //  "false"
    n.toString();  //  "1"

        时间类:

    var t = new Date;
    
    t.toString();  // "Tue Jan 23 2018 18:01:52 GMT+0800 (中国标准时间)"
    t.toDateString();  // "Tue Jan 23 2018"
    t.toLocaleString();  // "2018/1/23 下午6:01:52"
    t.toLocaleDateString();  //  "2018/1/23"
    t.toISOString();  // "2018-01-23T10:01:52.039Z"
    t.toTimeString();  //  "18:01:52 GMT+0800 (中国标准时间)"
    t.toGMTString();  //  "Tue, 23 Jan 2018 10:01:52 GMT"
    
    //  获取日期
    t.getDate();   // 23
    //  获取星期几
    t.getDay();   // 2
    //  获取年份
    t.getFullYear();  // 2018
    //  获取小时
    t.getHours();   // 18
    //  获取分钟
    t.getMinutes();  // 1
    //  获取秒
    t.getSeconds();  //52
    //  获取时间戳毫秒数
    t.getTime();  // 1516701712039
    t.valueOf();  //  1516701712039

     4、Object.assign函数 :将来自一个或多个源对象中的值复制到一个目标对象

    //  Object.assign函数,第一个参数为目标对象,后面依次为源对象  
    // 
    var first = {name : 'kong'};  
    var last = {age : 18};  
    var person = Object.assign(first, last);  
    console.log(person);  //  {name : 'kong', age : 18},注意这里first因为是第一个参数会被当成目标对象,所以first自身属性也被更改为和person一样了,即first === person  
    
    //
    用于克隆对象 var clone = Object.assign({}, person);

    5、Object.freeze函数:阻止修改现有属性的特性和值,并阻止添加新属性

    var a = {name : 'kong', age : 18};  
    Object.freeze(a);    //  此时不允许添加或修改a的任何属性  

    6、Object.keys函数  :用于返回对象可枚举的属性和方法的名称  

    var a = {name : 'kong', age : 18, func : function(){}};  
    Object.keys(a);    //  ['name', 'age', 'func']  

    7、其余不常用方法:

    //Object.is函数  
    //用于判断两个值是否相同  
    Object.is(a, b);  
    //返回true或false  
    //注意,该函数与==运算符不同,不会强制转换任何类型,应该更加类似于===,但值得注意的是它会将+0和-0视作不同值  
      
    
    
    //hasOwnProperty方法  
    //确定某个对象是否具有带指定名称的属性,有的话返回true,否则false  
    //注意,该方法不会检查对象原型链中的属性  
    var s = new String('123');  
    console.log(s.hasOwnProperty('split'));         //false  
    console.log(String.prototype.hasOwnProperty('split'));      //true
    
    
    //isPrototypeOf方法  
    //确定一个对象是否存在于另一个对象的原型链中  
    function a(){  
    }  
    var b = new a();  
    console.log(a.prototype.isPrototypeOf(b));    //true  
    
      
    //Object.defineProperty函数  
    //将属性添加到对象,或修改现有属性的特性  
    var a = {};  
    Object.defineProperty(a, 'name', {  
        value : 'kong',  
        enumerable : true   //该属性是否可枚举  
    })  
    //与之对应的是Object.defineProperties函数,可添加多个属性  
    Object.defineProperties(a, {  
        name : {  
            value : 'kong',  
            enumerable : true  
        },  
        job : {  
            value : 'student',  
            enumerable : true  
        }  
    })  
  • 相关阅读:
    本地连不上远程mysql数据库(2)
    linux后台执行命令:&和nohup
    uva 10806 Dijkstra, Dijkstra. (最小费最大流)
    VS2013带来的"新特性"
    HDOJ 5091 Beam Cannon 扫描线
    2014百度之星资格赛4题
    二维码登陆
    安装Sublime配合quick-cocos2d-x开发
    J2SE核心开发实战(二)——字符串与包装类
    LeetCode_3Sum Closest
  • 原文地址:https://www.cnblogs.com/lina-xiao/p/8337023.html
Copyright © 2011-2022 走看看