js強轉
阿新 • • 發佈:2018-07-27
lse {} bool 十進制 str 自定義 function () code
js有六大數據類型:String,Number,Boolean,Null,Undefined,Object。其中前五項數據類型被稱作原始類型。
typeof 操作符返回值有"string","number","boolean","undefined","object","function"。其中Null類型的返回值是"object",而Function作為Object類型的子類,返回的結果卻是"function"
非數值類型轉換為數值類型規則
//空字符串被轉換為0 console.log(Number(""));//0 //字符串只包含數字,返回十進制數 console.log(Number("19"));//19 //字符串是十六進制形式,返回相等的十進制 console.log(Number("0x19"));//25 //字符串是浮點形式,返回浮點數 console.log(Number("12.5"));//12.5 //字符串是浮點形式,返回浮點數 console.log(Number("1.234e2"));//123.4 //除以上的字符串形式都返回NaN console.log(Number("a")); //NaN //Boolean true 返回1 console.log(Number(true));//1 //Boolean false 返回0 console.log(Number(false));//0 //數字形式,返回原參數console.log(Number(23));//23 //Null類型返回0 console.log(Number(null));//0 //Undefined類型返回NaN console.log(Number(undefined));//NaN
對象類型轉換有特殊的規則
將對象類型強轉為Number類型時,先調用對象的valueOf()方法,如果方法的返回值是原始類型,那麽就Number(valueOf的返回值),如果方法的返回類型是Object類型,那麽會進一步調用對象的toString()方法。toString()方法的返回值如果是原始類型,則Number(toString的返回值),如果toString()方法的返回值是Object類型,那麽最終報錯了
<script> var obj = { name:"pmx", age:20, valueOf:function(){ console.log("value of"); return this.name; }, toString:function(){ console.log(‘to string‘); return this.name; } } </script>
Number(‘pmx‘)的結果為NaN
<script> var obj = { name:"pmx", age:20, valueOf:function(){ console.log("value of"); return null }, toString:function(){ console.log(‘to string‘); return this.name; } } </script>
Number(null)的結果是0
<script> var obj = { name:"pmx", age:20, valueOf:function(){ console.log("value of"); return {} }, toString:function(){ console.log(‘to string‘); return this.name; } } </script>
valueOf()返回的是非原始類型,那麽調用obj的toString()方法,Number(‘pmx‘)結果為NaN
<script> var obj = { name:"pmx", age:20, valueOf:function(){ console.log("value of"); return {} }, toString:function(){ console.log(‘to string‘); return {}; } } </script>
toString()的返回結果是Object類型,最後Number強制轉換失敗,報錯了
<script> var obj = { name:"pmx", age:20, valueOf:function(){ console.log("value of"); return {} }, toString:function(){ console.log(‘to string‘); return { a:10, valueOf:function(){ return 10; }, toString:function(){ return ‘a‘ } }; } } </script>
toString()方法返回的對象中自定義了valueOf()方法和toString()方法,仍然報錯,說明數值強轉不會遞歸進行
js強轉