学习笔记:JS对象

获取对象长度和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]

参考

Object.values()

阅读 1.3k

推荐阅读
镜心的小树屋
用户专栏

方寸湛然GitHub组织地址:[链接]

47 人关注
123 篇文章
专栏主页