-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path类型转换一
59 lines (47 loc) · 1.59 KB
/
类型转换一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//某同学在qq上提问 问题url 来自cnode
//链接:http://cnodejs.org/topic/580743a627a1d99178a98fc5
1.求输出:
([]+![])[+!![]] //a
2.求输出//评论里的问题 同计算了
((-{})+[])[+![]]//N
解析:
//虽然平时没看到有这么用的 代码里这么写的要么是疯子 要么是奇葩。。
看题目1 涉及到类型转换
空数组 转换成 数字 对应的是 0
空数组 转换成 布尔 对应的是 true
。。。。
任意值转换成数字的 隐式方法 -somevalue +somevalue(not somevalue+somevalue)
其中 不可parseInt或者paresFloat的值会成为NaN
所以题目1 转换
[]+![]
首先执行![] 转换成布尔值 false
[]+布尔 统一变成 [].toString()+"false";
[]对应字符串是“”
所以变成false
[+!![]]
[] 对应的布尔值是 true
!是逻辑符号 非 所以![] ,[]转换成布尔值true,![] 就是false。
!![]就是true。
+true 转换成数字 true对应数字1
题目一最后执行:("false")[1] 对应是输出a。
然后就会很纠结一个问题
[] 是神马情况
[] 对应 true ??
[] 对应 0
wtf..
var arr = [];
//于是提问的人 又抛了一个问题。。。(后来发现是stackoverflow上的。。)
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??");
在进行转换过程
比如 目标类型是布尔 会进行Boolean(source);
目标类型是 数字 会进行Number(source);
object 类型会变成true
至于数字
建议阅读ES 规范
Number([]);
Number([1]);
Numeber([1,2]);
Number({});传入object