javascript var assignment转换为目标类型

时间:2013-10-19 20:43:21

标签: javascript

搜索一个将rhs转换为lhs类型的函数。 e.g。

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);

当然不完整,但可能会显示我的目标。

2 个答案:

答案 0 :(得分:2)

在JS中需要担心类型转换只需要三个基本原语。布尔值,字符串和数字(​​因为我假设你这样做是为了检查平等===目的?可能是连接与数学运算?)

因此有三种简单的方法可以做到:

转换为布尔值 - !!

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

转换为字符串 - 连接空字符串

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

转换为数字 - 在其前面添加+

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

非常简单。

答案 1 :(得分:1)

如果你有对象x和y,你可以将y传递给x的构造函数,如果x的构造函数知道如何转换它,它就会。 E.g。

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

如果你通过(1,'45'),它将通过'45'到Number()你将得到45.如果你通过('',1)你将得到'1'。但它可能会给你带来一些令人惊讶的结果 - 例如,构造函数Boolean()会将除0或false之外的任何内容转换为true。任何字符串都会转换为'true' - 甚至字符串'false'!

您应该确切地确定需要哪些转换并明确地编写它们。我想这是所有可能类型中非常有限的子集。 (或者重新审视你为什么要这样做,但我不想成为那个人!)