本文已参与「 新人创作礼 」活动,一起开启掘金创作之路
日更的时间又到了,前天说的拿到题,我今天来讲解下!
console.log(a == 1 && a == 2 && a ==3); 为true
是不是看到这个题目感觉有点奇怪。
这个时候你需要了解一个valueOf的一个构造对象。
valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。
valueOf() 不是所有的简单数据类型都具备,除了 Number、String外。
其他的基础数据对象属性都不具备。
我们还是会到那个题目,我先放出答案。
var plus = {
value: 0,
valueOf: function() {
this.value++;
return this.value;
}
};
这个时候我们理解的是valueOf的执行规则。
他是静默规则, 一般通过运算符的方式可以直接触发。
puls作为Object,当然默认也是有valueOf的属性,只是我么重写了valueOf的规则。
plus + . plus 都会执行+1的操作。
是不是这样的用法非常精妙。
如何自定义一个函数valueOf ( valueOf 生成随机数 )
function fnRandom( start , end ,num, descrition ) {
this.start = start || 0;
this.end = end || 100;
this.descrition = descrition;
this.temp = 0;
this.n = new Array(num||1)
this.generate = function () {
let random = Math.random() * this.end;
this.temp = 0;
while (random < this.start) {
random += Math.random() * (this.end - random)
}
return parseInt(random , 10)
}
this.value = this.n
}
fnRandom.prototype.valueOf = function () {
let count = this.n.length;
let array = []
while (count>0) {
let code = this.generate()
if (!array.includes(code)) {
array.push(code)
count--;
}
}
return array.join(",")
}
let cc = new fnRandom(5,10,2,'str')
let obj = cc+''
console.log (obj)
看似一个简单地自定义。其实可以他可以应用到我们抽象业务层做更多的事情。
这个生成随机数场景用来放在很多业务中,能够有效把基础架构业务进行分离。
这里的最关键的点是如何built in valueOf
在mozilla官网有介绍。
developer.mozilla.org/en-US/docs/…
能够至二级触发valueOf的方法有 +
+"5" // 5 (string to number)
+"" // 0 (string to number)
+"1 + 2" // NaN (doesn't evaluate)
+new Date() // same as (new Date()).getTime()
+"foo" // NaN (string to number)
+{} // NaN
+[] // 0 (toString() returns an empty string list)
+[1] // 1
+[1,2] // NaN
+new Set([1]) // NaN
+BigInt(1) // Uncaught TypeError: Cannot convert a BigInt value to a number
+undefined // NaN
+null // 0
+true // 1
+false // 0
但是貌似不太绝对的好用, 感觉在用奇淫技巧一般。
等我查到相关资料在给出大家一些答案,但是的强大之处对他有种莫名的好感。
很多场景的应用可能只在工具中才能得以看到。
后续我讲继续更新, 出来更多就比的作品,跟他家一起讨论。
下一讲我讲提到的是:响应式布局的应用。其实最近我看到的东西还是忙多,但是再次看到跟曾经的看到的角度可能会有一些改变。