更多见: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 } })