资讯专栏INFORMATION COLUMN

学习笔记:JS对象

ixlei / 1371人阅读

摘要:获取对象长度和遍历对象的键的所有方法关于遍历,工具库有很好的扩展可以非常方便地返回一个自身所有的,但不包含从原型链继承下来的除了自身的,还包含从原型链继承下来的获取对象长度和方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用循

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93228.html

相关文章

  • JS笔记二:JS历史、数据类型、for in遍历对象、typeof的BUG

    摘要:学习笔记二个人学习笔记参考阮一峰的教学学习笔记二是对学习笔记一的补充历史是标准新增特性汇总方应航知乎专栏个小变化新增特性汇总方应航知乎专栏以后一年一次只增加了两个特性只增加了个特性功能最多数据类型补充字符串多行字符串新特性多行字符串 JavaScript学习笔记二 个人学习笔记 参考阮一峰的JavaScript教学 学习笔记二是对学习笔记一的补充 JavaScript历史 sho...

    mrcode 评论0 收藏0
  • Backbone.js学习笔记(一)

    摘要:它通过数据模型进行键值绑定及事件处理,通过模型集合器提供一套丰富的用于枚举功能,通过视图来进行事件处理及与现有的通过接口进行交互。 本人兼职前端付费技术顾问,如需帮助请加本人微信hawx1993或QQ345823102,非诚勿扰 1.为初学前端而不知道怎么做项目的你指导 2.指导并扎实你的JavaScript基础 3.帮你准备面试并提供相关指导性意见 4.为你的前端之路提供极具建设性的...

    FrancisSoung 评论0 收藏0
  • 【three.js学习笔记】场景

    摘要:对象是所有不同对象的容器,也就是说该对象保存所有物体光源摄像机以及渲染所需的其他对象。对象又是被称为场景图,它不仅仅是一个对象数组,还包含了整个场景图树形结构中的所有节点每个添加到场景的对象,甚至包括本身都是继承自一个名为的对象。 THREE.Scene THREE.Scene 对象是所有不同对象的容器,也就是说该对象保存所有物体、光源、摄像机以及渲染所需的其他对象。 THREE.S...

    codecraft 评论0 收藏0
  • JavaScript框架学习笔记(一)

    摘要:基本的学习思路是跟着框架设计这本书,甚至可以说是这本书的读书笔记。也参考很多网上解读的博客和学习资料。当然,最重要的资料还是框架的源代码。后来由于开发者反对,新兴的框架都在命名空间上构建。 JavaScript框架学习笔记(一) 我为什么要学习框架 更深入的理解工具,以后用起来更顺手而且也能做一定的工具取舍,学习理解新工具也就更快, 对提升js水平也很有帮助,框架有很多解决坑的经典思...

    Shonim 评论0 收藏0
  • Node.js 学习笔记(三)

    摘要:在浏览器中的全局对象是对象。程序是由事件驱动执行的单线程模型,也不例外。不断执行响应事件的函数,直到没有任何响应事件的函数可以执行,就退出了。方法此方法可以在下一次事件响应中执行代码。它会返回一个对象,告诉我们文件的详细信息。 global JS在浏览器中的全局对象是window对象。在Node.js环境中,全局对象则叫global。我们可以用它来区分当前JavaScript的执行环境...

    sorra 评论0 收藏0
  • Backbone.js学习笔记 Hello World!

    摘要:使用和架构创建一个典型的项目。属性被赋值给传入的函数运行的结果。渲染,我们使用,这是一个对象,它指向的属性,使用函数使用的结果替换。最后,启动整体应用,为了保证完全加载,用包装器调用完整日常练习一些在对象初始化的时候执行的代码 使用Backbone.js 和 MVC 架构创建一个典型的Hello world项目。虽然是杀鸡用牛刀了,毕竟是我第一次使用Backbone.js 依赖 ...

    Hanks10100 评论0 收藏0

发表评论

0条评论

ixlei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<