首頁  >  文章  >  web前端  >  JavaScript把Date物件轉換為字串並回傳結果的方法toString()

JavaScript把Date物件轉換為字串並回傳結果的方法toString()

黄舟
黄舟原創
2017-11-08 11:22:064678瀏覽

定義與用法

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(&#39;toString&#39;); 
return this.i; 
}, 
valueOf: function() { 
console.log(&#39;valueOf&#39;); 
return this.i; 
} 
} 
alert(bbb);// 10 toString 
alert(+bbb); // 10 valueOf 
alert(&#39;&#39;+bbb); // 10 valueOf 
alert(String(bbb)); // 10 toString 
alert(Number(bbb)); // 10 valueOf 
alert(bbb == &#39;10&#39;); // true valueOf 
alert(bbb === &#39;10&#39;); // false

乍一看結果,大抵給人的感覺是,如果轉換為字串時呼叫toString方法,如果是轉換為數值時則呼叫valueOf方法,但其中有兩個很不和諧。一個是alert(''+bbb),字串合拼應該是呼叫toString方法…另一個我們暫時可以理解為===運算子不進行隱式轉換,因此不呼叫它們。為了追究真相,我們需要更嚴謹的實驗。 

var aa = { 
i: 10, 
toString: function() { 
console.log(&#39;toString&#39;); 
return this.i; 
} 
} 
alert(aa);// 10 toString 
alert(+aa); // 10 toString 
alert(&#39;&#39;+aa); // 10 toString 
alert(String(aa)); // 10 toString 
alert(Number(aa)); // 10 toString 
alert(aa == &#39;10&#39;); // true toString 
再看valueOf。 
var bb = { 
i: 10, 
valueOf: function() { 
console.log(&#39;valueOf&#39;); 
return this.i; 
} 
} 
alert(bb);// [object Object] 
alert(+bb); // 10 valueOf 
alert(&#39;&#39;+bb); // 10 valueOf 
alert(String(bb)); // [object Object] 
alert(Number(bb)); // 10 valueOf 
alert(bb == &#39;10&#39;); // true valueOf 
发现有点不同吧?!它没有像上面toString那样统一规整。对于那个[object Object],我估计是从Object那里继承过来的,我们再去掉它看看。 
Object.prototype.toString = null; 
var cc = { 
i: 10, 
valueOf: function() { 
console.log(&#39;valueOf&#39;); 
return this.i; 
} 
} 
alert(cc);// 10 valueOf 
alert(+cc); // 10 valueOf 
alert(&#39;&#39;+cc); // 10 valueOf 
alert(String(cc)); // 10 valueOf 
alert(Number(cc)); // 10 valueOf 
alert(cc == &#39;10&#39;); // true valueOf

如果只重寫了toString,物件轉換時會無視valueOf的存在來轉換。但是,如果只重寫了valueOf方法,在要轉換為字串的時候會優先考慮valueOf方法。在不能呼叫toString的情況下,只能讓valueOf上陣了。對於那個奇怪的字串拼接問題,可能是出於操作符上,翻開ECMA262-5 發現都有getValue操作。嗯,那麼謎底應該是揭開了。重寫會加大它們所呼叫的最佳化高,而在有運算元的情況下,valueOf的優先權本來就比toString的高。

以上是JavaScript把Date物件轉換為字串並回傳結果的方法toString()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn