js进阶-中括弧运算

一、题目

下面代码的输出是什么

console.log(++[[]][+[]] + [+[]]);

二、变量类型转换

1.对于数字运算[负号-]、[减号-]、[乘号*]、[除号/]、[自加号++]等,其后的变量都会被尝试转换为数字;

  • 如果其后变量是基础数据类型,那么按基础数据类型转换柜子转换;
  • 如果其后变量是引用数据类型,那么会调用其toString()函数之后,将返回值进行转换;
/** 以下以负号举例,其他数字运算符同理**/
// 1.布尔值
const a = -true;  // -1 true被转换为1
const b = -false; // -0 false被转换为0// 2.字符串
const c = -"";    // -0     ""被转换为0
const d = -"100"; // -100   "100"被转换为100
const e = -"-100";// 100    "-100"被转换成了-100,此处“-”是负号,属于数字的一部分
const f = -"+100";// -100   "+100"被转换成了100,此处“+”是正号,属于数字的一部分
const g = -"1-2"; // NaN    "1-2"不是纯数值字符串,无法被转换,此处“-”是减号
const h = -"1,2"; // NaN    "1,2"不是纯数值字符串,无法被转换// 3.数组
const i = -[];      // -0    [].toString()是""
const j = -[100];   // -100  [100].toString()是"100"
const k = -[1,2];   // NaN   [1, 2].toString()是"1,2" 

3.如果是[加号+],那么其有3种情况;

  • 表示正号:其后变量会被转换为数字;
  • 表示加号:其前后都是数字的时候,其才会被认为是加号;
  • 表示字符串拼接符:其前后至少一个不是数字;
// 1.表示正号
const a = +true;     // 1
const b = +false;    // 0// 2.表示字符串拼接符
const c = 1 + "0";    // "10"
const d = "1" + 0;    // "10"
const e = 1 + [];     // "1"     [].toString()为""
const f = 1 + [0];    // "10"    [0].toString()为"0"

三、解题

/**
题目:
++[[]][+[]] + [+[]]
*//**
前半部分++[[]][+[]]解析:
++: 表示自加,所以其后的[[]][+[]]会被转位数字
[[]]: 是一个包含一个空数组(暂称其为b)的数组(暂称其为a)
[+[]]: 是根在上述数组后面的,所以外部的中括弧表示数组取值,里面的部分由前面的分析得知为0
所以[[]][+[]]表示取出数组a中的空数组b
所以前半部分等价于++[],所以其为1,当然直接值么写会报错,题目中的写法和下面的写法不会报错
let a = [];
let b = ++a; // 1
综上:前半部分为1
*//**
后半部分[+[]]解析:
[+[]]: 已知为[0]
*//**
所以题目变成了:
1 + [0]
此处的+为字符串拼接符,所以结果是:
"10"
*/

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

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

相关文章

【IMF靶场渗透】

文章目录 一、基础信息 二、信息收集 三、flag1 四、flag2 五、flag3 六、flag4 七、flag5 八、flag6 一、基础信息 Kali IP:192.168.20.146 靶机IP:192.168.20.147 二、信息收集 Nmap -sP 192.168.20.0/24 Arp-scan -l nmap -sS -sV -p- -…

记一次腾讯云海外服务器http能正常访问https访问拒绝问题处理过程

最近双十一, 购了一台腾讯云的海外服务器, 开通后就是一堆的服务器软件安装数据上传和配置,没想到,等待配置完成后才发现https无法正常访问,于是开启了自查。 1. 检查nginx软件的ssl配置 nginx http https配置参考 server {l…

ubuntu多版本安装gcc

1.ubuntu安装gcc 9.3.1 $ sudo apt update $ sudo apt install gcc-9 g-9 二、配置GCC版本 安装完成后,需要使用update-alternatives命令来配置GCC版本。这个命令允许系统在多个安装的版本之间进行选择 1.添加GCC 9.3.1到update-alternatives管理 $ sudo update-a…

hdlbits系列verilog解答(mt2015_muxdff)-90

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节要实现的电路来自于ECE253 2015中期测试问题5。要实现以下如图所示的时序电路中复用器及D触发器子模块。 模块声明 module top_module ( input clk, input L, input r_in, input q_in, output reg Q); 思路…

Word - 图片右键保存

以右键另存为的方式保存word里面的图片,确实会导致图片质量降低。一般图片可能看不出差别,但一些文字内容较多的图片,就会影响阅读。 针对这个问题,可以通过解压word文件的方法得到里面的图片。 首先,备份一下原文件…

Android 图形系统之七:SurfaceFlinger

一. 引言 什么是 SurfaceFlinger?SurfaceFlinger 的核心作用和地位?为什么需要了解 SurfaceFlinger? 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染(OpenGL ES 和 Vulkan&#xf…

YOLOv11原创改进专栏|专栏介绍目录

一、专栏简介 本专栏自2024年12月01日开始持续更新,专栏主要面向YOLOv11的各种改进,主要改进方向为Backbone(主干)、Conv、C2f、注意力机制、Neck以及检测头的改进,本专栏会涉及到提高精度、轻量化、分割等方面的内容。…

shell脚本小练习#002:通过shell脚本创建目录

实例1: # 编写一个shell脚本实现以下需求: # 执行脚本,当前目录下创建一个名为test的目录, # 然后在新建的test目录下创建3个文件夹分别命名为case1~case3,在每个文件下创建一个log.txt文件 # 编写一个shell脚本实现…

AI开发-深度学习框架-PyTorch-torchnlp

1 需求 Welcome to Pytorch-NLP’s documentation! — PyTorch-NLP 0.5.0 documentation 2 接口 3 示例 4 参考资料

基于Java Springboot宠物服务中心微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合

全排列的简要总结 全排列(Permutation)是数学中一个经典的问题,指的是从一组元素中,将所有元素按任意顺序排列形成的所有可能序列。 特点 输入条件: 给定一组互异的元素(通常为数组或字符串)。…

内网穿透步骤

步骤 第一次需要验证token window和linux的方法不同。 然后 启动 cpolar 服务: 在命令窗口中输入 cpolar.exe htttp 8080,启动内网穿透服务。确保命令窗口保持开启状态,以维持穿透效果。 cpolar.exe hhttp 8080 成功后 注意事项 命令窗口…

房屋结构安全监测系统守护房屋安全卫士

一、系统背景 随着时间的流逝,建筑物的主体结构、设备设施等会因为自然老化、材料疲劳、使用环境的变化以及维护不当等各种因素的影响,逐渐出现性能下降甚至安全隐患。因此,进行房屋安全监测显得尤为重要。房屋结构安全是指建筑物的结构体系在…

直击高频编程考点:聚焦新版综合编程能力考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…

架构05-架构安全性

零、文章目录 架构05-架构安全性 1、软件架构安全的重要性 **系统安全:**不仅包括防御黑客攻击,还包括安全备份与恢复、安全审计、防治病毒等。**关注重点:**认证、授权、凭证、保密、传输安全、验证。 2、认证(Authenticatio…

【人工智能】用Python和Scikit-learn构建集成学习模型:提升分类性能

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 集成学习(Ensemble Learning)是通过组合多个弱学习器提升模型性能的机器学习方法,广泛应用于分类、回归及其他复杂任务中。随机森林(Random Forest)和梯度提升(Gradient Boosting)是集成学习的两种…

鲲鹏麒麟安装离线版MySQL5.7

最近有项目需求,需要在鲲鹏ARM服务器上安装数据库MySQL5.7,服务器为鲲鹏920,操作系统Kylin Linux Advanced Server release V10 (Tercel) 安装包 下载地址:https://cloud.189.cn/t/JRVnmeEvMRZ3(访问码:t…

4399大数据面试题及参考答案(数据分析和数据开发)

对数据分析的理解 数据分析是一个从数据中提取有价值信息以支持决策的过程。它涵盖了数据收集、清洗、转换、建模和可视化等多个环节。 首先,数据收集是基础。这包括从各种数据源获取数据,例如数据库、文件系统、网络接口等。这些数据源可以是结构化的数…

封装类与封装函数

目录结构 src/ ├── utils/ │ ├── test.js │ ├── Calculator.js ├── views/ │ ├── Home.vue ├── App.vue 共同点:模块导出与模块引入 封装函数 场景 简单、轻量级和性能敏感的场景,适合快速开发和维护。 优 可维护性&…

【Bug】el-date-picker组件时间差

这个组件默认是国际标准时间 2024-11-27T07:56:37.000Z 表示的是 UTC 时间。如果你当前所在的时区是 UTC8(例如中国),那么这个时间实际上是比你选择的时间早 8 个小时 T表示分隔符,Z表示的是UTC 解决:给el-date-pic…