和toString()
一样 , 但是优先级要高于这两者;
hint
, 表示当前运算的模式 , 一共有三种模式:- string:字符串类型
- number:数字类型
- default:默认
class A {constructor(count) {this.count = count}valueOf() {return 2}toString() {return '哈哈哈'}// 我在这里[Symbol.toPrimitive](hint) {if (hint == "number") {return 10;}if (hint == "string") {return "Hello Libai";}return true;}}const a = new A(10)console.log(`${a}`)// 'Hello Libai' => (hint == "string")console.log(String(a))// 'Hello Libai' => (hint == "string")console.log(+a)// 10=> (hint == "number")console.log(a * 20)// 200=> (hint == "number")console.log(a / 20)// 0.5=> (hint == "number")console.log(Number(a))// 10=> (hint == "number")console.log(a + '22')// 'true22'=> (hint == "default")console.log(a == 10)// false=> (hint == "default")复制代码
比较特殊的是(+)拼接符 , 这个属于default
的模式 。划重点:此方法不兼容IE , 尴尬到我不想写出来了~~
面试题分析以下几道大厂必考的面试题 , 完美呈现出
toString
与 valueOf
的作用 。1. a===1&&a===2&&a===3 为 true双等号(==):会触发
隐式类型转换
, 所以可以使用 valueOf
或者 toString
来实现 。每次判断都会触发
valueOf
方法 , 同时让value+1
, 才能使得下次判断成立 。class A {constructor(value) {this.value = https://www.shianvip.com/article/value;}valueOf() {return this.value++;}}const a = new A(1);if (a == 1 && a == 2 && a == 3) {console.log("Hi Libai!");}复制代码
全等(===):严格等于不会进行隐式转换
, 这里使用 Object.defineProperty
数据劫持的方法来实现let value = https://www.shianvip.com/article/1;Object.defineProperty(window,'a', {get() {return value++}})if (a === 1 && a === 2 && a === 3) {console.log("Hi Libai!")}复制代码
上面我们就是劫持全局window
上面的a
, 当a
每一次做判断的时候都会触发get
属性获取值 , 并且每一次获取值都会触发一次函数实行一次自增 , 判断三次就自增三次 , 所以最后会让公式成立 。- 注:
defineProperty
可参考这篇文章学习 , 点我进入传送门 - 自:大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
add
, 示例如下:add(1); // 1add(1)(2);// 3add(1)(2)(3); // 6add(1)(2)(3)(4); // 10 // 以此类推复制代码
【全面分析toString与valueOf,并随手解决掉几道大厂必备面试题】function add(a) {function sum(b) { // 使用闭包a = b ? a + b : a; // 累加return sum;}sum.toString = function() { // 只在最后一次调用return a;}return sum; // 返回一个函数}add(1)// 1add(1)(2)// 3add(1)(2)(3)// 6add(1)(2)(3)(4)// 10 复制代码
add
函数内部定义sum
函数并返回 , 实现连续调用sum
函数形成了一个闭包 , 每次调用进行累加值 , 再返回当前函数sum
-
经验总结扩展阅读
- A血型男与A血型女婚配好不好,相处之道全面解析
- 蒲鱼的效果和作用 蒲鱼的营养价值分析
- 泡温泉的好处与禁忌 下面给大家分析
- 2021广东12月底全面停工真的假的
- 章鱼的智商到底有多高 章鱼的智商分析
- 我们能看见全面的地球么?为什么?
- 松静自然的生理学基础是什么? 生理学分析
- 灭霸打得过孙悟空吗? 具体原因分析
- 吴用的性格特点分析 他都有什么特点
- 非物质文化遗产保护方法 非物质文化遗产保护方法是什么