是否可以检查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
,但这是数字的特例。
那么,是否有任何命名类型的通用方法,并检查某些变量是否可以以有用的方式转换为给定类型?
答
JavaScript中有三种基本数据类型:字符串,数字和布尔值。
的东西都可以转换为字符串或布尔:
- 所有对象转换为
true
(除null
,成为false
- 我只在这里提到它,因为typeof null
给object
) - 所有的对象都有一个内置
toString
方法,当转换为字符串时被调用。 - 转换一个数字,字符串通过给数字的字符串表示完成(即
5
成为"5"
) - 数字转换为Boolean
true
,除非它是0
成为false
。
转换为数字有点棘手,但技术上可行。如果它能找到一个有效的号码,那么它就成为这个号码。否则,它变成NaN
。
所以基本上... 任何类型可以成为这样任何其他类型的通过铸造。唯一一次有类似“错误状态”的东西是NaN
。
没有明确的用于此目的的设施,但您可以随时*尝试*转换为任何其他类型的类型以查看您获得的内容。 – Pointy
另外,'parseFloat()'不是检查可转换性的好方法。 Number()构造函数更安全。 – Pointy
'Number'比parseFloat'有什么好处? – dronus