1. 程式人生 > >js強轉

js強轉

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強轉