javascript变量赋值到目标类型的转换

javascript变量赋值到目标类型的转换,javascript,Javascript,搜索将rhs转换为lhs类型的函数。 e、 g 所以这样一个函数是可以写的,这不是问题所在。但是:是否有一个完全实现这种事情的地方?我是这样开始的: function assign (v, x) { if (typeof v==typeof x) { return x; } switch (typeof v) { case 'boolean' : { return x=='true'?true:false; } case 'number'

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

所以这样一个函数是可以写的,这不是问题所在。但是:是否有一个完全实现这种事情的地方?我是这样开始的:

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

这当然不完整,但可能显示了我的目的。

如果你有对象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”


您可能应该准确地计算出需要哪些转换,并显式地编写它们。我想这是所有可能类型的一个非常有限的子集。(或者重新审视一下你为什么要这么做,但我讨厌做那个家伙!)

如果你有对象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”


您可能应该准确地计算出需要哪些转换,并显式地编写它们。我想这是所有可能类型的一个非常有限的子集。(或者重新审视一下你为什么要这么做,但我讨厌成为那个家伙!)

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

因此,有三种简单的方法:

转换为布尔值-

var x = 1;
console.log(!!x); //true;
转换为字符串-连接空字符串

var x = 1;
console.log(x+''); //"1"
转换成一个数字-在前面放一个
+

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

非常简单。

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

因此,有三种简单的方法:

转换为布尔值-

var x = 1;
console.log(!!x); //true;
转换为字符串-连接空字符串

var x = 1;
console.log(x+''); //"1"
转换成一个数字-在前面放一个
+

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

非常简单。

您可能想看看。@pbhd很难正确回答这个问题,因为我们不知道您到底想要什么。JS中只有几个原语,所以使用您的方法,您应该能够创建一个自定义函数,它可以满足您的需要,不管需要什么。很抱歉死了一周。。。我只是在寻找一个保存lhs类型的函数(通过将其作为arg传递,使其具有typeinfo)。因此,如果lhs类型是number,则assign必须返回一个数字,并且最好将传递的值(x)转换为一个数字。您可能需要查看。@pbhd很难正确回答这个问题,因为我们不知道您到底想要什么。JS中只有几个原语,所以使用您的方法,您应该能够创建一个自定义函数,它可以满足您的需要,不管需要什么。很抱歉死了一周。。。我只是在寻找一个保存lhs类型的函数(通过将其作为arg传递,使其具有typeinfo)。因此,如果lhs类型是number,则assign必须返回一个数字,并且最好将传递的值(x)转换为一个数字。但是您提供的默认设置不合适,因此我假设我需要执行converty2x的函数(采用我需要的方式),例如convertstring2boolean(s){return s=“true”|s=“wahr”| s=“T”},因此这看起来似乎是我想要实现的:保留x类型。但是您提供的默认设置不正确,因此我假设我需要执行converty2x的函数(采用我需要的方式),例如convertstring2boolean{return s=“true”|s=“wahr”|s=“T”}