首页 > 其他分享 >console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么

console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么

时间:2023-04-26 21:55:06浏览次数:37  
标签:返回 输出 console log Object note 数组 字符串 undefined

简介

原文链接:https://culturesun.site/index.php/archives/507.html#cl-2

这是前几天阅读公众号文章遇到的一篇文章,灰常有意思,记录一下。
JavaScript不愧是弱类型语言,换成其他语言,这肯定报错吧。

详解

直接上图:
2023-04-26-201834.png
nb吧。

先把这个字符串分割,依次计算值。

先计算前面这个小括号----[][[]] + []

2023-04-26203017.png
[][[]]返回undefined。第一个[]相当于定义了一个空数组,[[]]相当于是返回是返回这个数组中key[]的值,也就是返回空数组中key为空数组的值,因为没有定义所以返回的是undefined;类型。
[][[]]加了一个[]空数组。
[note type="success flat"]除了两个数值相加,其他类型相加都会转成字符串相加[/note]
空数组转成空字符串----''[][[]]转成字符串'undefined'
所以[][[]] + []返回字符串'undefined'

原式子就变成这个'undefined'[+!![]]+([]+{})[+!![]+ + !![]]
再计算undefined[+!![]]

2023-04-2204838.png
直接返回了n
[note type="success flat"]!是非操作符,有非操作符就会返回一个布尔类型[/note]
空数组转成布尔类型就是true,加一个!就变成false,再加一个就变成true
[note type="success flat"]一元+相当于使用Number()函数,将对象转换成数值。true的数值是1,false的数值是0。(大多数语言就是true是,false是0)[/note]
所以undefined[+!![]]返回n

原式子就变成这个'n'+([]+{})[+!![]+ + !![]],再计算([]+{})

{}是空对象,转成字符串'[object Object]'
所以[]+{}返回'[object Object]'

原式子就变成这个'n'+'[object Object]'[+!![]+ + !![]],再计算+!![]+ + !![]

其实就是两个+!![]相加,这个之前已经算出值了,是数值1
所以+!![]+ +!![]返回的是数值2

原式子就变成这个'n'+'[object Object]'2

这结果就很一目了然。

标签:返回,输出,console,log,Object,note,数组,字符串,undefined
From: https://www.cnblogs.com/culturesun/p/17357487.html

相关文章

  • logseq 开源知识管理平台
    logseq是一个开源的知识管理平台特性任务管理pdf注释Flashcards白板同时支持不少插件说明对于希望搭建自己知识库的是一个不错的选择,同时官方的文档就是一个可以快速体验的入口参考资料https://github.com/logseq/logseqhttps://plugins-doc.logseq.com/https://hub......
  • 第7章-输入输出系统
    第7章输入/输出系统7.2I/O接口7.2.1I/O接口的功能进行地址译码和设备选择实现主机和外设的通信联络控制实现数据缓冲信号格式的转换传送控制命令和状态信息7.2.2I/O接口的基本结构7.2.4IO端口及其编址1.统一编制把IO端口当做存储器的单元进行地址分配,用统一的......
  • PTA1006 换个格式输出整数(C++)
    一、问题描述:让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过3位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。输入格式:每个测试输入包含1个测......
  • weblogic eclipse 运行web应用程序
    开始-所有程序- OracleEnterprisePackforEclipse- OracleEnterprisePackforEclipse打开集成了的eclipse,配置weblogic服务器然后创建web应用程序,用weblogic运行就可以访问了。端口7001,例如http://127.0.0.1:7001/web/......
  • weblogic 安装、配置
    下载地址:http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html,需要注册一下我下载的文件名是oepe-indigo-installer-12.1.1.0.1.201203120349-12.1.1-win32.exe下面是安装截图安装完毕,进行配置,点击"GettingStarted..."那个菜单。配置完毕。......
  • pta题目集4~6总结性Blog
    前言:第四次题目集:主要是学习运用了ArrayList类,ArrayList类可以存入对象类的数据,相对比较广泛和方便,还有LinkedHashSet类对传入的数据进行有序排序,还练习了运用for循环对数据进行遍历进行题目要求的特定排序,如去判断是否有重复数据,题目之中还有StringBuilde类的各种方法的运用,7-5......
  • element-ui el-dialog中引用组件,为何组件只加载一次
    最近开发项目,页面中引入组件,2次展示,组件中生命周期都不调取,导致网组件中传的值不更新;<el-dialogv-dialogDragtitle="巡检记录":visible.sync="patrolItemVisible":show-close="true":close-on-press-escape="true":close-on-click-modal="true":appen......
  • 后台servlet LoginOfAdminSer
    packagecn.service.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse......
  • 在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框
    在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框1、先写一个自定义的AlertDialog。 packagecom.phone.common_library.dialog; importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.vie......
  • Hello_Cnblog
    HelloCnblogs这是我在博客园发布的第一个博客,以此作为纪念,博客园对我来说,是一个简洁的文本输出场所。希望我能够有更多产出,希望你们走出困境,越办越好。zuocj2024年4月26日......