【问题标题】:Is it possible to check for a possible conversion in JavaScript?是否可以在 JavaScript 中检查可能的转换?
【发布时间】:2014-02-28 15:29:49
【问题描述】:

在 JavaScript 中,变量是松散类型的,因此数字5 和字符串"5" 都可能被多个运算符视为一个数字。但是,是否有一种通用的方法可以在 tunrime 中找出 JavaScript 的转换能力,或者仅仅是几种类型的运算符重载使得松散类型成为可能?

例如,给定一个变量a 和一个包含类型名称type_canditate 的字符串,有没有办法询问JavaScript,如果a 可以以可行的方式转换为type_candidate,与像instanceof 这样的硬类型运算符?例如,"5" instanceof Number 评估为 false,而Math.sin("5") 完全可行。对于数字,可以明显检查 parseFloat(some_number) 的计算结果是否为 NaN,但这是数字的一种特殊情况。

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

【问题讨论】:

  • 没有专门用于此目的的工具,但您始终可以尝试从任何其他类型转换为类型以查看您得到的结果。
  • 另外,parseFloat() 不是检查可转换性的好方法。 Number() 构造函数更安全。
  • NumberparseFloat 有什么好处?
  • 在浏览器控制台试试parseFloat("23skidoo");
  • 好的,但试试Number(''),它的计算结果为0。所以这两种转换都不能区分数字和非数字。真是一团糟……

标签: javascript typing


【解决方案1】:

JavaScript 中有三种原始数据类型:字符串、数字和布尔值。

任何东西都可以转换为字符串或布尔值:

  • 所有对象都转换为true(除了null,它变成false - 我在这里只提到它是因为typeof nullobject
  • 所有对象都有一个内置的toString 方法,在转换为字符串时会调用该方法。
  • 通过给出数字的字符串表示形式将数字转换为字符串(即,5 变为 "5"
  • 数字转换为布尔值true,除非它是0 变成false

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

所以基本上... any 类型可以通过这种方式转换为 any other type。只有NaN 出现类似“错误情况”的情况。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 2013-05-29
  • 2018-06-28
  • 1970-01-01
  • 2012-03-22
  • 2011-07-26
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多