From ae6c568f0794d59e05f15ce284c1fb8c4d3ecf71 Mon Sep 17 00:00:00 2001 From: YuJian Date: Mon, 9 May 2022 11:48:19 +0800 Subject: [PATCH] vault backup: 2022-05-09 11:48:19 --- 深入探索 JavaScript/JavaScript 类型.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/深入探索 JavaScript/JavaScript 类型.md b/深入探索 JavaScript/JavaScript 类型.md index f8d0bcc..38b3ac0 100644 --- a/深入探索 JavaScript/JavaScript 类型.md +++ b/深入探索 JavaScript/JavaScript 类型.md @@ -55,8 +55,10 @@ console.log(symbolObject.constructor == Symbol); //true - call 本身会产生装箱操作,所以需要配合 typeof 来区分基本类型还是对象类型,因 call 当传入值为基本类型时,会触发这个基本类型的对应的类,所以用`object.prototype.tostring` 不正确,如果是对象则可以用此方法得出该实例的类 ## 拆箱转换 + - 在 JavaScript 标准中,规定了 ToPrimitive 函数,它是对象类型到基本类型的转换(即,拆箱转换) - 拆箱转换会尝试调用 valueOf 和 toString 来获得拆箱后的基本类型。如果 valueOf 和 toString 都不存在,或者没有返回基本类型,则会产生类型错误 TypeError + ```javascript var o = { valueOf : () => {console.log("valueOf"); return {}}, @@ -71,6 +73,7 @@ o * 2 - 到 String 的拆箱转换会优先调用 toString。我们把刚才的运算从 o x 2 换成 String(o),那么你会看到调用顺序就变了 - 在 ES6 之后,还允许对象通过显式指定 @@toPrimitive Symbol 来覆盖原有的行为。 + ```javascript var o = { valueOf : () => {console.log("valueOf"); return {}},