满足a==1a==2

网上看到的一道JS面试题,觉得很有意思

觉得很有意思的原因是,这个式子乍看之下是有些反常识的。“a1&&a2”,它的意思似乎是“a在等于1的同时又等于2”,这时我们的第一反应可能就是不成立,一个变量怎么可能同时等于两个数值呢?

然而,要是a不是一个简单变量呢?a在这里的本质其实是一个可以返回值的计算,其代表的可能是一个包含纯数值的简单变量,也可能是一个包含额外计算的复杂对象。

这里只要稍微调整下思路,不要把a看成一个简单的变量,情况就大有不同。比如a代表的是另一个表达式,代表一个变量i的自加“i++”,且i的初始值为1,这时你是否还觉得等式的成立有问题呢?即表达式“(i++ == 1 && i++ == 2)”的成立就不会觉得那么奇怪了吧。

当然,我们还是要回归本文标题这个具体的题目,至少“i++”这种运算是不能直接被一个变量a引用的,它只会把计算结果返回给a。这样,本文标题的表达式就无法成立。但是,JS的对象都继承了一个valueOf()方法,此方法可以帮我们引用类似“i++”的计算。

这个valueOf()方法会在对象执行一些运算时被调用,用以返回该对象的值,而等于运算“==”就在其列。这时,通过改写一个自定义对象的valueOf()方法,让其返回指定的内部变量i的值,并在每次返回前先做自加运算,那么就可以让本文标题的表达式成立了。

具体的JS代码和其在Chrome浏览器Console控制台下的执行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端 MVC 分层的实践

目录 前言 并未过时的 MVC MVC 的由来 不同版本的 MVC 苹果版本 微软版本 阮一峰版 原生 JS 实现 MVC Model View Controller React 中的 MVC 其他分层 Service format utils 目录 总结 前言 前面我们讲了 JavaScript 面向对象编程,这篇文章我们会…

深度学习——图像分类(CNN)—训练模型

训练模型 1.导入必要的库2.定义超参数3.读取训练和测试标签CSV文件4.确保标签是字符串类型5.显示两个数据框的前几行以了解它们的结构6.定义图像处理参数7.创建图像数据生成器8.设置目录路径9.创建训练和验证数据生成器10.构建模型11.编译模型12.训练模型并收集历史13.绘制损失…

【Text2SQL 经典模型】SQLNet

论文:SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning ⭐⭐⭐⭐ Code: SQLNet | paperwithcodeSQLNet| GitHub 一、论文速读 这篇论文强调了一个问题:order-matters problem —— 意思是说,对…

【C语言】8.C语言操作符详解(2)

文章目录 6.单⽬操作符7.逗号表达式8.下标访问[]、函数调⽤()8.1 [ ] 下标引⽤操作符8.2 函数调⽤操作符 9.结构成员访问操作符9.1 结构体9.1.1 结构的声明9.1.2 结构体变量的定义和初始化 9.2 结构成员访问操作符9.2.1 结构体成员的直接访问9.2.2 结构体成员的间接访问 6.单⽬…

2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(中):订阅智能体OSS实现

传送门: 《2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(上):MetaGPT安装、单智能体开发》《2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(下)&…

【线段图案】

描述 KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。 输入描述: 多组输入,一个整数(1~100),表示线段长度,即“*”的数量。 输出描述…

是德科技 DSOS054A MSOS054A示波器

产品 带宽 通道数 最大存储器深度 DSOS054A 高清晰度示波器 500 MHz 4 个模拟通道 800 Mpts MSOS054A 高清晰度示波器 500 MHz 4 个模拟通道和 16 个数字通道 800 Mpts Infiniium S 系列示波…

R语言使用 ggscidca包优雅的绘制支持向量机决策曲线

DCA(Decision Curve Analysis)临床决策曲线是一种用于评价诊断模型诊断准确性的方法,在2006年由AndrewVickers博士创建,我们通常判断一个疾病喜欢使用ROC曲线的AUC值来判定模型的准确性,但ROC曲线通常是通过特异度和敏感度来评价,…

产品研发流程(方法)

产品研发流程(方法) IPD(Integrated Product Development,集成产品开发)和敏捷开发是现代软件开发中常见的两种方法论。 IPD IPD研发流程 IPD是一种系统化的产品开发方法,旨在通过跨职能团队的协作和集成…

vue项目报错:internal/modules/cjs/loader.js:892 throw err;

前言: vue项目中无法正常使用git,并报错情况。 报错信息: internal/modules/cjs/loader.js:892throw err;^ Error: Cannot find module D:\project\sd_wh_yth_front\node_modules\yorkie\src\runner.js 报错处理: npm install y…

GitHub的原理及应用详解(二)

本系列文章简介: GitHub是一个基于Git版本控制系统的代码托管平台,为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中,包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…

夏天晚上热,早上凉怎么办?

温差太大容易引起感冒 1.定个大概3点的闹钟,起来盖被子。有些土豪可以开空调,我这个咸鱼没有空调。 2.空调调到合适的温度,比如20几度。

Redisson的setConnectionMinimumIdleSize配置,设置小一点有什么影响?

设置最小空闲连接数 (connectionMinimumIdleSize) 是影响 RedissonClient 性能和资源利用的一个关键配置。让我们详细了解一下这个参数的作用及其影响。 什么是 connectionMinimumIdleSize? connectionMinimumIdleSize 参数用于定义连接池中保持的最小空闲连接数。…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 18 节) P18《17.ArkUI-状态管理Observed 和 ObjectLink》 第一件事:嵌套对象的类型上加上 Observed 装饰器…

基于网络爬虫技术的网络新闻分析(四)

目录 4.2 系统异常处理 4.2.1 爬虫异常总体概况 4.2.2 爬虫访问网页被拒绝 5 软件测试 5.1 白盒测试 5.1.1 爬虫系统测试结果 5.1.2 中文分词系统测试结果 5.1.3 中文文章相似度匹配系统测试结果 5.1.4 相似新闻趋势展示系统测试结果 5.2 黑盒测试 5.2.1 爬虫系统测…

shell编程-结构化命令

1、if-then语句 如果command命令执行成功(退出状态码为0),then部分的命令就会执行 if comand then commands fi 或 if comand: then commands fi 例如: #!/bin/bash if date who then echo this is test …

2024电工杯数学建模 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上,预测2022今年国赛也会与该模型相关。 1 模型描…

CoShNet:使用复数改进神经网络

使用复数改进神经网络 文章目录 一、说明二、了解卷积神经网络三、进入混合神经网络四、令人惊叹的 CoSh 网络五、复杂函数的神奇性质六、相位一致性七、结论 一、说明 本文题为“CoShNet:使用Shearlets的混合复杂值神经网络”,提出了在混合神经网络中使…

深入理解SVM和浅层机器学习算法的训练机制

深入理解SVM和浅层机器学习算法的训练机制支持向量机(SVM)的训练过程SVM的基本概念SVM的损失函数训练方法 浅层机器学习算法的训练机制决策树K-最近邻(K-NN)朴素贝叶斯 结论 深入理解SVM和浅层机器学习算法的训练机制 在探讨浅层…

nrf52832自定义蓝牙名字过长,广播显示不全

自定义蓝牙名字过长,广播显示不全 原因:nrf52832默认使用蓝牙4.x的广播,它的广播包数据只有32byte数据,当广播已经包含足够多的数据的时候,广播每次过长就会显示部分名称,即便你选择"BLE_ADVDATA_FULL_NAME"…