原始類型強轉
<script> /*** 1.如果值有toString()方法,則調用toString()並返回結果 2.如果值是null,則返回"null" 3.如果值是undefined,則返回"undefined" **/ cosole.log(String(true));//"true" cosole.log(String(false));//"false" cosole.log(String(10));//"10" cosole.log(String(null));//"null" cosole.log(String(undefined));//"undefined" </script>
這里Number類型,Boolean類型,String類型都有本身的toString()和valueOf()方法。
String原型鏈太長了,就不截圖了
對象類型強轉
先調用對象的toString()方法,如果返回值是原始類型(string,number,boolean,undefined,null),則String(toString()返回值),如果返回值是Object類型,則會調用對象的valueOf()方法,如果valueOf()返回值是原始類型,則String(valueOf()返回值),如果valueOf()方法返回值是Object類型,則強轉失敗,報錯
var obj = { age:20, name:"pmx", valueOf:function(){ console.log('value of'); return "hello" }, toString:function(){ console.log("to string"); return {} } }
toString()返回對象,則調用obj的valueOf()方法,結果是String("hello"),最終返回"hello";
var obj = { age:20, name:"pmx", valueOf:function(){ console.log('value of'); return { toString(){ return 'world' }, valueOf(){ return 10; } } }, toString:function(){ console.log("to string"); return {} } }