由 Array.includes 函数引发对引用数据类型的思考

这篇具有很好参考价值的文章主要介绍了由 Array.includes 函数引发对引用数据类型的思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

``
数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的

例如:

[1,2,3,4].includes(3)  // true
[1,2,3,4].includes(5)  // false

[true, false].includes(false) // true
[false, false].includes(true) // false

['foo', 'bar'].includes('foo') // true
['foo', 'bar'].includes('baz') // false

如果是对象的话,那么会有一个有趣的现象发生

var p1 = { age: 11, name: 'bob'};
var p2 = { age: 13, name: 'kebei'};
var arr = [p1, p2];

arr.includes({ age: 11, name: 'bob'});  // false
arr.includes(p1) // true

var p3 = { age: 11, name: 'bob'}; 
arr.includes(p3); // false

arr.includes({ age: 11, name: 'bob'}) 这行,includes里面是一个字面量对象, 而arr中存的数据是p1, p2两个数据的引用地址,所以返回值是false;

arr.includes(p1)的话,结合下图来看,等同于[0000, 0010].includes(0000), 所以是true.

再下一行,p3的申明赋值在内存总开辟了一个新的地址,这个地址指向真实数据的地址,所以p3和p1的地址是不一样的, 从下图可以看到, p3对应地址的值虽然和p1的一样,但是,它也并没有指向p1。

由 Array.includes 函数引发对引用数据类型的思考

当然,如果p3的赋值方式是 p3 = p1 的话,那么 arr.includes(p3)的值就是true了,因为p1的地址赋给了p3, 那么p3指向的就是p1所代表的对象了。

虽然javascript是一门动态语言,但是在一些复杂对象的使用上和C这样的静态语言是很相似的。而javascript较C而言,它本身不需要做取指针操作,当一个变量的值是一个引用对象时,变量等于自动取了指针。所以说,上面例子中 p3 = p1, 就是指针赋值过程。文章来源地址https://www.toymoban.com/news/detail-696537.html

到了这里,关于由 Array.includes 函数引发对引用数据类型的思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一次网络不通 “争吵” 引发的思考

    \\\"你到底在说什么啊,我 K8s 的 ecs 节点要访问 clb 的地址不通和本地网卡有什么关系...\\\" 气愤语气都从电话那头传了过来,这时电话两端都沉默了。过了好一会传来地铁小姐姐甜美的播报声打断了刚刚的沉寂「乘坐地铁必须全程佩戴口罩,下一站西湖文化广场...」。 pod 需要访

    2024年02月12日
    浏览(27)
  • 【区块链】Ankr被黑引发的思考

    三明治交易、夹子机器人、抢跑、抢新、抢购、秒杀,相信这些词你都听说过了,区块链上的各种套利操作,基本上都有一个大前提,就是监听链上最新的未打包交易,才能在第一时间抢占先机。 前段时间Ankr被黑,黑客从中获利约500万美元,然而,让人惊讶的是,另一个套

    2024年02月02日
    浏览(32)
  • 前端如何传递Array、Map类型数据到后端

    针对前后端分离的项目,避免不了前端需要传递Array、Map类型的数据到后端,那么要怎么实现这种情况的参数传递呢?请看下文分说。 前端有Map类型数据如下: 将Map类型数据转化成String,再进行传递 将前端传过来的String数据,解析为JSON对象,再强制转为java的Map 以上。本文

    2024年02月02日
    浏览(36)
  • 由C# yield return引发的思考

        当我们编写 C# 代码时,经常需要处理大量的数据集合。在传统的方式中,我们往往需要先将整个数据集合加载到内存中,然后再进行操作。但是如果数据集合非常大,这种方式就会导致内存占用过高,甚至可能导致程序崩溃。     C# 中的 yield return 机制可以帮助我们

    2024年02月07日
    浏览(33)
  • Hive中的复杂数据类型 - array、map、struct

    水善利万物而不争,处众人之所恶,故几于道💦 一、简单数据类型(复习) 官方数据类型详情页 数据类型 描述 范围 tinyint 1byte有符号整数 from -128 to 127 smallint 2byte有符号整数 from -32,768 to 32,767 int 4byte有符号整数 from -2,147,483,648 to 2,147,483,647 bigint 8byte有符号整数 from -9,223,37

    2024年03月12日
    浏览(37)
  • ChatGPT引发的人机交互发展历程与升级思考

    ChatGPT自从去年12月火爆以来一直热度不减,最近正好研读了科技之巅,书中详细阐述了人机交互、人工智能、算力算法等技术的发展历史,本文主要围绕ChatGPT引发的人机交互方面的思考。 在讨论人机交互之前,首先需要说明的一点,目前计算机发展的结果已经从原来作为科

    2023年04月24日
    浏览(46)
  • 阿里云无影云电脑初体验及引发的思考

    有幸尝试阿里无影云电脑,记录下使用过程,并对云电脑进行思考。 ​ 阿里云无影云桌面( Elastic Desktop Service)的原产品名为弹性云桌面,融合了无影产品技术后更名升级。它可以为您提供易用、安全、高效的云上桌面服务,帮助您快速构建、高效管理桌面办公环境,提供安全

    2024年02月05日
    浏览(34)
  • 周星驰进军web3引发怎样的思考?

    谁能想到,向来低调的 周星驰 首次注册社交账号,竟是为了发布一条招人信息,挑选的还不是新片男女主角,而是Web3人才,一脚跨界到了互联网科技领域。 从年初就开始爆火的概念——Web3,到底是什么?能给我们带来什么?周星驰可能会往哪个方向创业? 要理解Web3,可能

    2023年04月08日
    浏览(31)
  • 由黑塞(Hessian)矩阵引发的关于正定矩阵的思考

    最近看论文,发现论文中有通过黑塞(Hessian)矩阵提高电驱系统稳定性的应用。所以本篇主要从Hessian矩阵的性质出发,对其中正定矩阵的判定所引发的想法进行记录。 (其实看论文出现黑塞很惊奇,因为前不久刚读了作家黑塞的《德米安:彷徨少年时》,所以在这一领域的黑塞

    2024年02月06日
    浏览(36)
  • 一个vuepress配置问题,引发的js递归算法思考

    这两天在尝试用语雀+ vuepress + github 搭建个人博客。 小破站地址 :王天的 web 进阶之路 语雀作为编辑器,发布文档推送 github,再自动打包部署,大概流程如下。 我使用的 elog 插件批量导出语雀文档。 elog 采用的配置是所有文章平铺导出,没有按照语雀知识库目录生成 m

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包