在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());
Run Code Online (Sandbox Code Playgroud)
将打印
x=42
x=foo
Run Code Online (Sandbox Code Playgroud)
这让我觉得倒退..如果x是一个复数,例如,我希望valueOf()给我它的大小,但每当我想转换成一个字符串我就会想要像"a + bi"这样的东西.而且我不想在隐含字符串的上下文中显式调用toString().
这只是它的方式吗?
JavaScript中的以下所有表达式都非常明显.
var x = 10 + 10;
Run Code Online (Sandbox Code Playgroud)
价值x是20.
x = 10 + '10';
Run Code Online (Sandbox Code Playgroud)
x在这种情况下的值是1010因为+运算符过载.如果任何操作数是string类型,则进行字符串连接,如果所有操作数都是数字,则执行加法.
x = 10 - 10;
x = 10 - '10';
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,值x都是0因为-操作符没有以这种方式重载并且所有操作数都转换为数字,如果它们不是在执行实际减法之前(你可能会澄清,如果我错了) .
以下表达式会发生什么.
x = '100' - -'150';
Run Code Online (Sandbox Code Playgroud)
价值x是250.这似乎也是显而易见的,但这个表达看起来有点像下面的表达式.
x = '100' +'150';
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,则这两个字符串将被连接并分配100150给x.那么为什么在这种情况下进行添加呢?
编辑:
+'10' + 5返回15并'a' + + 'b'返回aNaN.有谁知道为什么?
javascript ×2