在javascript中输入强制

时间:2013-04-21 17:11:58

标签: javascript

以下代码的输出结果如何:

console.log({}.valueOf()+15);//Output:[object Object]15

.valueOf()方法的返回值是否为上述代码中的字符串,或者只是一个对象,因为 .toString()会导致相同但是这个方法返回值无论如何都是字符串。我只想知道 .valueOf()在上面的代码中返回的值的类型。如果返回值是一个字符串,对于其他什么对象将 valueOf()方法返回字符串值,但 [new String(" abc")]

除外

3 个答案:

答案 0 :(得分:3)

valueOf返回原始值。究竟什么类型的原始值取决于对象。

演示:

typeof Number(0).valueOf(); // number
typeof Boolean(0).valueOf(); // boolean

关键在于,无论它返回什么,它都是原始值。另一方面,toString总是返回一个字符串。

对于{},除了valueOf之外没有Object.prototype.valueOf方法,它与Object.prototype.toString相同,返回[object Constructor]形式的字符串1}}。哪个是字符串会导致与15串联。

答案 1 :(得分:3)

普通对象的.valueOf()将是同一个对象。 NOT 与其.toString()方法相同。)

var o = {};

typeof o.valueOf(); // "object"

o === o.valueOf(); // true

+运算符看到您没有为第一个操作数使用数字,因此它不进行添加,而是进行字符串连接并调用其两个操作数的.toString()值。

这就是你得到[object Object]15的原因。


您可以通过更改toString()输出来测试此内容。

var o = {};
o.toString = function() { return "foobar" }

o.toString(); // "foobar"

o + 15;           // "foobar15"
o.valueOf() + 15; // "foobar15"

答案 2 :(得分:0)

要获取JS中对象的类型,可以使用 typeof 函数:

typeof({}) // outputs 'object'
typeof({}.valueOf()) // outputs 'object'
typeof({}.valueOf()+15) // outputs 'string'

这表示在尝试“添加”15时会发生值强制,而后者被解释为字符串连接。