2013-10-19 44 views
0

搜索將rhs轉換爲lhs類型的函數。 例如javascript var分配轉換爲目標類型

var x=false // x is boolean now; 
x=assign (x, "true"); //should convert "true" to boolean and return that 
x=assign (x, 1); // dto, convert 1 to true 
x=0 // x is number 
x=assign (x, "123"); // should convert "123" to 123; 

所以這樣的功能可以寫,那不是問題。但是:有沒有某種方式完全實現這樣的事情?我從這樣的事情開始:

function assign (v, x) { 
    if (typeof v==typeof x) { 
    return x; 
    } 
    switch (typeof v) { 
    case 'boolean' : { 
     return x=='true'?true:false; 
    } 
    case 'number' : { 
     return parseFloat(x); 
    } 
    } 
    return "xxx"; 
} 
var v=true; 
var x='true'; 
var r1=assign (v, x); 
console.log (typeof r1+ " "+r1); 
v=10; 
x="123"; 
var r1=assign (v, x); 
console.log (typeof r1+ " "+r1); 

這當然是不完整的,但也許顯示我goig爲什麼。

+0

你可能想看看[Typecast.js](http://www.typecastjs.org/)。 – DaoWen

+0

@pbhd很難正確回答這個問題,因爲我們不知道你想要什麼。在JS中只有幾個基元,所以使用你的方法,你應該能夠創建一個自定義函數來滿足你需要的任何需求。 – plalx

+0

對不起,我已經死了一個星期了......我只是在尋找一個保存lhs類型的函數(通過將它作爲arg傳遞,因此它具有typeinfo)。因此,如果lhs類型是數字,則強制指定返回一個數字,並且最好將傳遞的值(x)轉換爲數字。 – pbhd

回答

1

如果您有對象x和y,則可以將y傳遞給x的構造函數,並且如果x的構造函數知道如何轉換它,則會執行此操作。例如。

function y_in_type_of_x(x, y) 
{ 
    return x.constructor(y); 
} 

如果傳遞(1, '45'),它會通過 '45' 至數(),你會得到45.如果你通過( '',1),你會得到 '1'。但它可能會給你一些令人驚訝的結果 - 例如,構造函數Boolean()會將0或false以外的任何值轉換爲true。任何字符串都將轉換爲'true' - 即使字符串'false'!

您應該準確計算出您需要的轉換並明確寫入。我想這是所有可能類型的一個非常有限的子集。 (或重新檢查你爲什麼這麼做,但我討厭成爲那個人!)

+0

因此,看起來不知何故我想實現:保留x型。但是,您提供的默認值不是好的,所以我假設我需要函數(採用了我需要的方式),這些函數使用converty2x,例如converttring2boolean(s){return s =「true」| s =「wahr」| s =「T」} – pbhd

2

只有三個基本的原始元素需要擔心JS中的類型轉換。布爾,字符串和數字(​​因爲我假設你正在做這個檢查平等===目的也許並置與數學運算?)

因此有三個簡單的方法來做到這一點:

轉換爲一個布爾 - !!

var x = 1; 
console.log(!!x); //true; 

轉換爲字符串 - 串聯一個空字符串

var x = 1; 
console.log(x+''); //"1" 

轉換爲數字 - 在其前面放置一個+

var x = "-123"; 
console.log(+x); //-123 

非常簡單。

相關問題