JavaScript valueOf (Built in) 应用 - 生成随机数

76 阅读2分钟

本文已参与「 新人创作礼 」活动,一起开启掘金创作之路

关于如何进行图片优化 - 适合的才是最好的

日更的时间又到了,前天说的拿到题,我今天来讲解下!

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)

看似一个简单地自定义。其实可以他可以应用到我们抽象业务层做更多的事情。

code.juejin.cn/pen/7092826…

这个生成随机数场景用来放在很多业务中,能够有效把基础架构业务进行分离。

这里的最关键的点是如何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

但是貌似不太绝对的好用, 感觉在用奇淫技巧一般。

等我查到相关资料在给出大家一些答案,但是的强大之处对他有种莫名的好感。

很多场景的应用可能只在工具中才能得以看到。

后续我讲继续更新, 出来更多就比的作品,跟他家一起讨论。

下一讲我讲提到的是:响应式布局的应用。其实最近我看到的东西还是忙多,但是再次看到跟曾经的看到的角度可能会有一些改变。