javascript - valueOf 是否总是覆盖 javascript 中的 toString?

标签 javascript tostring

是否有任何表达式可以隐式调用对象的 toString 方法来覆盖其 valueOf 方法?

在下面的示例中,valueOf 总是被隐式调用(覆盖 toString)。

"4" + {
    toString: function () {
        return "4";
    },
    valueOf: function () {
        return 6;
    }
};    // => "46", was expecting "44"

4 + {
    toString: function () {
        return "6";
    },
    valueOf: function () {
        return 4;
    }
};    // => 8

4 + {
    toString: function () {
        return 6;
    },
    valueOf: function() {
        return "4";
    }
};    // => "44"

即:

我们能否编写一个表达式,其中通过 valueOf 隐式调用 by toString(即不显式调用 toString)?

最佳答案

Is there any expression where by an object's toString method is implicitly called overriding its valueOf method?

是的,只要摘要 ToString operation 就会发生这种情况应用于对象,使用 DefaultValue procedure.valueOf() 之前使用 .toString()

但是,在您的示例中,您只使用了 addition operator这就像标准行为的异常(exception)。由于它不仅连接字符串,而且对数字求和,因此在检查它们是否为字符串之前,它始终对两个操作数使用 valueOf。见注释1:

No hint is provided in the calls to ToPrimitive in steps 5 and 6. All native ECMAScript objects except Date objects handle the absence of a hint as if the hint Number were given; Date objects handle the absence of a hint as if the hint String were given. Host objects may handle the absence of a hint in some other manner.

那么哪些操作会隐式使用 ToString 而不是无提示的 ToPrimitive?下面是几个例子:

  • 关于属性名称的一切:in 运算符、括号符号、Object.getOwnPropertyDescriptorObject.definePropertyhasOwnProperty,……
  • 需要字符串作为参数的函数:parseIntparseFloatencodeURI[Component]decodeURI[Component] , [un]escape, Array::join, String::[last]indexOf, RegExp::exec >
  • 函数构造函数
  • Array::sort 算法的默认比较函数
  • this 对象转换为字符串时的 String 构造函数和 String 方法
  • RegExp 构造函数
  • 错误构造函数
  • 许多其他函数未由 EcmaScript 指定但在 DOM 或其他地方,如 alertXMlHTTPRequest::openquerySelector、 ……

关于javascript - valueOf 是否总是覆盖 javascript 中的 toString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893187/

相关文章:

java - 我需要将一个对象转换为字符串,然后通过将其转换回我的对象​​来检索它

tostring - 在用户选择的文本上保留换行符。目前正在尝试使用 window.getSelection()

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

javascript - Web SQL 数据库 + Javascript 循环

javascript - try/catch block 上未处理的 Promise 拒绝

javascript - 如何根据 Javascript 中的 2 个条件生成唯一性分组/对其中一列进行求和?

javascript - Obj.toString() 既等于 false 又等于 true?

java - 访问提交的对象时在 Struts2 中获取 NullPointerException

javascript - Framework7 不会打开 anchor 标记的 JavaScript 链接

javascript - toString() 删除右侧的零