获取对象长度和keys
遍历对象的键的所有方法
关于遍历keys,工具库lodash有很好的扩展
https://lodash.com/docs/4.17....
_keys/_keysIn
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keys(new Foo);
// => ['a', 'b'] (iteration order is not guaranteed)
//可以非常方便地返回一个object自身所有的key,但不包含从原型链继承下来的
_.keys('hi');
// => ['0', '1']
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keysIn(new Foo);
// => ['a', 'b', 'c'] (iteration order is not guaranteed)
//除了object自身的key,还包含从原型链继承下来的
获取对象长度 和 values
Object.values()
方法返回一个给定对象自己的所有可枚举属性值的数组
,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
var obj = { foo: "bar", baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
// 类数组对象
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
注意:
var obj = { 0: 'a', 1: 'b', 2: { 3: 'c' , 4: 'd' } };
console.log(Object.values(obj));
// ["a", "b", {…}] 内置的对象没有扩展成数组
// 随机键值的类数组对象
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']
// getFoo 是不可枚举属性
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = "bar";
console.log(Object.values(my_obj)); // ['bar']
// 参数是非对象会转变成对象
console.log(Object.values("foo")); // ['f', 'o', 'o']
_values / _valuesIn
同样的,lodash对此也有扩展
https://lodash.com/docs/4.17....
交换对象key-value
把object的每个key-value来个交换,key变成value,value变成key
此实现其实来自lodash的 _invert()
源码,
https://lodash.com/docs/4.17....
合并对象(新替代老)
注意两者区别: 原对象变/ 不变
对象类型检测
通常我们会用
function isObject(arg) {
return typeof arg === 'object' && arg !== null;
}
但是这样是有问题的
https://www.cnblogs.com/youho...
最好使用
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。