是否可以检查JavaScript中可能的转换?

问题描述:

在JavaScript中,变量是松散类型的,因此数字5和字符串"5"可能被多个运算符视为一个数字。然而,是否有一种通用的方式来查找tunrime中的JavaScripts转换能力,还是仅仅为几种类型的操作符重载,使得松散的键入成为可能?是否可以检查JavaScript中可能的转换?

例如,给定包含类型名称type_canditate可变a和一个字符串,是否有任何的方式来询问的JavaScript,如果a可以转换为type_candidate在feasable方式,相比于硬打字运营商如instanceof?例如,"5" instanceof Number评估错误,而Math.sin("5")是完全可行的。对于数字,可以明确地检查parseFloat(some_number)的计算结果是否为NaN,但这是数字的特例。

那么,是否有任何命名类型的通用方法,并检查某些变量是否可以以有用的方式转换为给定类型?

+0

没有明确的用于此目的的设施,但您可以随时*尝试*转换为任何其他类型的类型以查看您获得的内容。 – Pointy

+0

另外,'parseFloat()'不是检查可转换性的好方法。 Number()构造函数更安全。 – Pointy

+0

'Number'比parseFloat'有什么好处? – dronus

JavaScript中有三种基本数据类型:字符串,数字和布尔值。

的东西都可以转换为字符串或布尔:

  • 所有对象转换为true(除null,成为false - 我只在这里提到它,因为typeof nullobject
  • 所有的对象都有一个内置toString方法,当转换为字符串时被调用。
  • 转换一个数字,字符串通过给数字的字符串表示完成(即5成为"5"
  • 数字转换为Boolean true,除非它是0成为false

转换为数字有点棘手,但技术上可行。如果它能找到一个有效的号码,那么它就成为这个号码。否则,它变成NaN

所以基本上... 任何类型可以成为这样任何其他类型的通过铸造。唯一一次有类似“错误状态”的东西是NaN

+0

对象通过'valueOf()'函数转换为数字,这个函数基本上是'toString()'的数字类型。 – Pointy

+0

刚问过关于检查数字的另一个问题:http://*.com/questions/22100243/how-to-check-if-a-string-contains-a-number-in-javascript – dronus