定義與用法
toString() 方法可把 Date 物件轉換為字串,並傳回結果。
語法
dateObject.toString()
傳回值
dateObject 的字串表示,使用本地時間表示。
實例
在本例中,我們將把今天的日期轉換為字串:
<script type="text/javascript"> var d = new Date() document.write (d.toString()) </script>
輸出:
Wed Nov 08 2017 11:20:25 GMT+0800 (中国标准时间)
如何使用toString()把今天的日期轉換為字串。
<script type="text/javascript"> var d = new Date() document.write (d.toString()) </script>
結果:
Wed Nov 08 2017 11:21:32 GMT+0800 (中国标准时间)
JavaScript 的 toString() 方法
toString() 方法可將一個邏輯值轉換為字串,並傳回結果。
用法 booleanObject.toString(),傳回值依據原始布林值或 booleanObject 物件的值傳回字串 "true" 或 "false"。如果呼叫該方法的物件不是 Boolean,則拋出異常 TypeError。
在 Boolean 物件被用於字串環境中時,此方法會自動呼叫。
下面腳本將建立一個Boolean 對象,並把它轉換成字串:
<script type="text/javascript"> var boo = new Boolean(true); document.write(boo.toString()); </script>
腳本輸出:
true。
先看一例:
var aaa = { i: 10, valueOf: function() { return this.i+30; }, toString: function() { return this.valueOf()+10; } } alert(aaa > 20); // true alert(+aaa); // 40 alert(aaa); // 50
之所以有這樣的結果,因為它們偷偷地呼叫valueOf或toString方法。但要如何區分什麼情況下是呼叫了哪個方法呢,我們可以用另一個方法來測試一下。由於用到console.log,請在裝有firebug的FF中實驗!
var bbb = { i: 10, toString: function() { console.log('toString'); return this.i; }, valueOf: function() { console.log('valueOf'); return this.i; } } alert(bbb);// 10 toString alert(+bbb); // 10 valueOf alert(''+bbb); // 10 valueOf alert(String(bbb)); // 10 toString alert(Number(bbb)); // 10 valueOf alert(bbb == '10'); // true valueOf alert(bbb === '10'); // false
乍一看結果,大抵給人的感覺是,如果轉換為字串時呼叫toString方法,如果是轉換為數值時則呼叫valueOf方法,但其中有兩個很不和諧。一個是alert(''+bbb),字串合拼應該是呼叫toString方法…另一個我們暫時可以理解為===運算子不進行隱式轉換,因此不呼叫它們。為了追究真相,我們需要更嚴謹的實驗。
var aa = { i: 10, toString: function() { console.log('toString'); return this.i; } } alert(aa);// 10 toString alert(+aa); // 10 toString alert(''+aa); // 10 toString alert(String(aa)); // 10 toString alert(Number(aa)); // 10 toString alert(aa == '10'); // true toString 再看valueOf。 var bb = { i: 10, valueOf: function() { console.log('valueOf'); return this.i; } } alert(bb);// [object Object] alert(+bb); // 10 valueOf alert(''+bb); // 10 valueOf alert(String(bb)); // [object Object] alert(Number(bb)); // 10 valueOf alert(bb == '10'); // true valueOf 发现有点不同吧?!它没有像上面toString那样统一规整。对于那个[object Object],我估计是从Object那里继承过来的,我们再去掉它看看。 Object.prototype.toString = null; var cc = { i: 10, valueOf: function() { console.log('valueOf'); return this.i; } } alert(cc);// 10 valueOf alert(+cc); // 10 valueOf alert(''+cc); // 10 valueOf alert(String(cc)); // 10 valueOf alert(Number(cc)); // 10 valueOf alert(cc == '10'); // true valueOf
如果只重寫了toString,物件轉換時會無視valueOf的存在來轉換。但是,如果只重寫了valueOf方法,在要轉換為字串的時候會優先考慮valueOf方法。在不能呼叫toString的情況下,只能讓valueOf上陣了。對於那個奇怪的字串拼接問題,可能是出於操作符上,翻開ECMA262-5 發現都有getValue操作。嗯,那麼謎底應該是揭開了。重寫會加大它們所呼叫的最佳化高,而在有運算元的情況下,valueOf的優先權本來就比toString的高。
以上是JavaScript把Date物件轉換為字串並回傳結果的方法toString()的詳細內容。更多資訊請關注PHP中文網其他相關文章!