CNode

不使用数字和字母,如何输出'a'

问答
Bbackcj发布于10 年前最后回复10 年前8 回复5165 浏览0 收藏

今天看到如标题所示的一个问题,有人给出了如下解决方案:

([]+![])[+!![]]

有没有大神能解释一下原理啊

查看回复

回复 (8)

D
DevinXian#1·10 年前

就是false的第二个字符咯;数组隐藏的魔法,这货我有次恰好碰到过

B
backcj#2·10 年前

@DevinXian 为什么+true会等于1呢

A
AlphaTr#3·10 年前
引用 backcj@DevinXian 为什么+true会等于1呢

@backcj 加号会做隐式转换,将非数字转为数字,例如: +"666"

L
leonzhao#4·10 年前

有何意义?

B
backcj#5·10 年前

@AlphaTr 也就相当于是Number()? 才知道原来Number(true)是等于1而不是NaN

B
backcj#6·10 年前

@leonzhao 猜到了有人会这么问

Y
youth7#7·10 年前

这个知识点是要掌几种一元运算符,作用于js对象的时候,转换的规则是怎样,这需要仔细去看语言规范是怎么说的,说实在话,抠这种东西不如看一下数据结构与算法,呵呵。 例如我也能出一道题:不使用数字和字母,如何输出'N', 答案:((-{})+[])[+![]]

M
MaoSiUncle#8·10 年前

空数组 转换成 数字 对应的是 0 空数组 转换成 布尔 对应的是 true 。。。。 任意值转换成数字的 隐式方法 -somevalue +somevalue(not somevalue+somevalue)

所以题目 转换 []+![] 首先执行![] 转换成布尔值 false []+布尔 统一变成 [].toString()+"false"; []对应字符串是“” 所以变成false [+!![]] [] 对应的布尔值是 true !是逻辑符号 非 所以![] ,[]转换成布尔值true,![] 就是false。 !![]就是true。 +true 转换成数字 true对应数字1 题目一最后执行:("false")[1] 对应是输出a。 废话很多。。。。 然后就会很纠结一个问题 [] 是神马情况 [] 对应 true ?? [] 对应 0 wtf.. var arr = []; console.log('Array:', arr); if (arr) console.log("It's true!"); if (arr == false) console.log("It's false!"); if (arr && arr == false) console.log("...what??"); 请自己看ecma标准 感觉解释的非常清楚。。懒得翻译了。。

参与回复
登录后即可参与回复。登录