当前位置: 首页 > 面试题库 >

JavaScript中的valueOf()与toString()

轩辕实
2023-03-14
问题内容

在Javascript中,每个对象都有一个valueOf()和toString()方法。我本以为每当需要进行字符串转换时,都会调用toString()方法,但显然它被valueOf()压倒了。

例如,代码

var x = {toString: function() {return "foo"; },
         valueOf: function() {return 42; }};
window.console.log ("x="+x);
window.console.log ("x="+x.toString());

将打印

x=42
x=foo

例如,如果x是一个复数,这会让我感到反感。例如,我希望valueOf()给出其大小,但是每当我想转换为字符串时,我都会想要类似“ a +
bi”的东西。而且我不想在隐含字符串的上下文中显式调用toString()。

这就是它的样子吗?


问题答案:

(“ x =” + x)给出“ x = value”而不是“x=tostring”的原因如下。当评估“+”时,javascript首先收集操作数的原始值,然后根据每个原始类型确定是否应应用加法或串联。

所以,这就是您的想法

a + b:
    pa = ToPrimitive(a)
    if(pa is string)
       return concat(pa, ToString(b))
    else
       return add(pa, ToNumber(b))

这就是实际发生的情况

a + b:
    pa = ToPrimitive(a)
    pb = ToPrimitive(b)*
    if(pa is string || pb is string)
       return concat(ToString(pa), ToString(pb))
    else
       return add(ToNumber(pa), ToNumber(pb))

也就是说,toString应用于valueOf的结果,而不是原始对象。

*在字符串上下文中调用时,ToPrimitive确实会调用toString,但这不是这种情况,因为’+’不会强制​​执行任何类型上下文。



 类似资料:
  • 本文向大家介绍深入理解Javascript中的valueOf与toString,包括了深入理解Javascript中的valueOf与toString的使用技巧和注意事项,需要的朋友参考一下 基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下。 toStr

  • 本文向大家介绍简介JavaScript中valueOf()方法的使用,包括了简介JavaScript中valueOf()方法的使用的使用技巧和注意事项,需要的朋友参考一下  JavaScript的Boolean.valueOf()方法返回指定 Boolean对象的原始值. 语法 boolean.valueOf() 下面是参数的详细信息:     NA 返回值: 返回指定Boolean对象的原始值。

  • 在Java中,和之间有什么区别吗?这些是否有特定的代码约定?

  • valueOf 方法 返回 Array 对象的原始值。 语法: arrayObject.valueOf(); 返回值: arrayObject 的原始值。 说明: 原始值由 Array 对象派生的所有对象继承。 valueOf() 方法不创建新的数组,而是直接修改原有的数组。 注: 该方法会改变数组的长度。 valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现

  • valueOf 方法 valueOf() 方法可返回 String 对象的原始值。 原始值是由从 String 对象下来的所有对象继承的。 valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中。 语法: stringObject.valueOf(); 返回值: stringObject 的原始值。 异常抛出: 当调用该方法的对象不是 String

  • valueOf 方法 valueOf() 方法可以字符串返回数字。 字符串的输出通常等于该数字。 valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中。 语法: NumberObject.valueOf(); 返回值: NumberObject 的原始数值。 异常抛出: 当调用该方法的对象不是 Number 时抛出 TypeError 异常。 示例