原JS
<SCRIPT LANGUAGE="JavaScript"> var o = { x: 8, valueOf: function(){ return this.x + 2; }, toString: function(){ return this.x.toString(); } }, result = o < "9"; alert(o); </SCRIPT>
分析:有疑问的地方我打上问号
<SCRIPT LANGUAGE="JavaScript"> // 如果valueOf和toString 方法都没有则会调用Object类的toString 返回字符串[object Object]是栈的引用类型的字符串表示,"[object Object]" 与数字字符串相比永远返回false,此时比较的是字符串 var o = { x: 8, valueOf: function(){ alert("valueOf 调用"); // 在比较大小的时候:对象先转换成数值,如果有valueOf方法,会调用valueOf,而不去调用toString // 如果没有valueOf 对象回去调用toString 并返toString的数值 return this.x + 2; }, toString: function(){ // alert("toString调用"); return this.x.toString(); // 在字符串比较大小的时候如果前面是数字后面是字符串 则返回值是数字? // 如果是非数字 则是返回组成的字符串? }, test: function(){ var x = 90; this.x = 1999;// test函数已经是o的一个属性或方法,this指向的是实例,不一定是当前作用域 // 方法里面虽然定义了x 但是this.x 指向的是o对象的x 变量,this到底是谁,谁调用就是谁! } }; var result = (o < "9"); //字符、字母按照ASC II码值转成9 对象转换成10, // 即 var result = 8+2 < 9返回 false // o.test(); alert(o); // /*无关代码 alert(null==undefined); alert(null!=false); alert(Number(undefined)==0);// false alert(Number(null)==0);// true */ </SCRIPT>