相关疑难解决方法(0)

Javascript中的valueOf()与toString()

在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

111
推荐指数
3
解决办法
3万
查看次数

JavaScript中的自动类型转换

JavaScript中的以下所有表达式都非常明显.

var x = 10 + 10;
Run Code Online (Sandbox Code Playgroud)

价值x20.

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)

价值x250.这似乎也是显而易见的,但这个表达看起来有点像下面的表达式.

x = '100' +'150';
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,则这两个字符串将被连接并分配100150x.那么为什么在这种情况下进行添加呢?


编辑:

+'10' + 5返回15'a' + + 'b'返回aNaN.有谁知道为什么?

javascript

8
推荐指数
1
解决办法
2913
查看次数

标签 统计

javascript ×2