-
Notifications
You must be signed in to change notification settings - Fork 60
/
index.html
54 lines (40 loc) · 2.87 KB
/
index.html
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
起因是这样的,在群里见到同学发了张图,如下:
<img class="alignnone size-full wp-image-1193" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/微信图片_20190701221104.jpg" alt="" width="1080" height="1920" />
于是便联想到了a==1&&a==2&&a==3这道题中的defineProperty方法,便来实现下(仅针对这道题目。。)。
<h2>we != we && we == we</h2>
看到这道题,输出false肯定是很容易的,那他是否可以为true呢?
we != we,1不就不等于0么,。we==we,1不就等于1么。那这样就好办了,在每次获取we的值对比时,我们可以利用defineProperty方法修改掉他的get方法,
<img class="alignnone size-full wp-image-1194" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/we-define.png" alt="" width="874" height="664" />
只要保证前两次的值不等(123!=456),后两次值相等(undefined==undefined)就行了。当然重写toString和valueOf也是可以的。
所以,这题答案想要true或false都可以嘛。
前面讲到了a==1&&a==2&&a==3这题,正好也来看一波。
<h2>a==1&&a==2&&a==3</h2>
<h3>toString或valueOf</h3>
在进行等号比较的时候,值会先调用他的valueOf方法,而当valueOf返回的不是基本类型的时候,就会去调用toString方法。
<img class="alignnone size-full wp-image-1195" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/tostring-valueof.png" alt="" width="884" height="738" />
所以我们可以对valueOf和toString重写,达到目的。
<h3>defineProperty</h3>
前面提到的defineProperty同样可以做到这一点。
<img class="alignnone size-full wp-image-1196" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/define-property.png" alt="" width="1194" height="590" />
<h3>数组</h3>
数组调用toString方法时会隐含调用join方法,我们可以重写掉他的join方法,
<img class="alignnone size-full wp-image-1197" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/array-join.png" alt="" width="1102" height="440" />
有一次达到了目的。
<div>
<h3>symbol</h3>
原理与toString和valueOf差不多。
<img class="alignnone size-full wp-image-1198" src="http://www.zhuyuntao.cn/wp-content/uploads/2019/07/symbol.png" alt="" width="1142" height="402" />
<h2>总结</h2>
这些方式看似没有章法,很神奇,其实只要掌握了==时,js实际做了哪些事,这些方法就不成问题了。
</div>
</body>
</html>