关于JS里valueOf和toString方法的问题

如下一个对象:

var obj = {
    x = 10,
    valueOf : function(){
        return this.x + 30;
    },
    toString : function(){
        return this.valueOf() + 10;
    }
} 
alert(obj);  //返回50
alert(+obj);  //返回40

请问
1、为何obj的值是50?+obj的值为何是40?obj里面的方法还没有被调用,返回值怎么就改变了呢?
2、+obj是什么意思?

谢谢!

JavaScript对象valueOf与toString方法

开始是是10,然后alert时调用tostring,里面调用+30的那个方法,最后又加了10