Javascript 类型转换方法 |
本文标签:类型转换 Javascript中的变量同样支持自由类型转换成为适用(或者要求)的内容以便于使用 。 弱类型的Javascript不会按照程序员的愿望从实际的变量类型到所需要的数据类型转换,例如一个非常常见的错误,在浏览器脚本中,从表单控件中获取用户将要输入的一个数值类型的变量与另一个数值变量的和 。因为变量类型在表单控件中是字符串类型(计时字符串序列包含一个数字)这种尝试将会添加那个字符串到变量,即使这些值碰巧是一些数字,结果在第二个变量将会被转换为字符串类型,在最后只会把从表单控件中得到的变量添加到第一个字符串末尾 。 转换到布尔类型 当表达式是 if 以及其他一些判断情况时,类型转换的结果将会是布尔型为了用于判断 。这些判断包括逻辑运算比如 与 (&&), 或 (||) 以及 非 (!) 。 非运算转换变量为波尔型并且如果变量是波尔型-真 。那么将返回假,反之将返回真 。两次非操作将会返回等同于变量转换成为波尔型的值 。 var boolValue = !!x; 这个技巧将会后面将会用到 。 另外一种可选择的方法就是把目标作为参数传递给Boolean 构造函数 。 var boolValue = Boolean(x); (1) 当数值类型转换为布尔型时,数值零将会变成假而其他数值将会变成真 。除开特殊数值 NaN (Not a Number),NaN 被用于其他类型转换到数值类型时当没有返回一个有意义的数值时 。NaN 总是返回假 。 无论是无限大还是无限小或者是有限数值,只要不是零,在转换为布尔型时总是返回true 。 (2) 字符串类型转换规则是简单的,字符串类型转换到布尔型除了空字符串外都是返回真,空字符串返回假 。 (3) 对于其他类型,undefined 和 null 将会返回假,Object以及function类型总是返回真 。 当需要判断某一对象是否是未定义的对象时,这是最有价值的功能 。如果调用未定义的变量(undefined 或者 null) 将会产生错误 。当这些都还不确定时(通常是网页浏览器所关心的)为了避免代码产生错误,需要对对象进行 if 判断 。建议把对象作为表达式,转换为波尔型,如果返回 false 则说明对象不存在,如果返回 true 则说明对象存在 。 if(document.documentElement){ scrollX = document.documentElement.scrollLeft; } 两次非操作可以判断对象是否能被使用 。 复制代码 代码如下: var hasDocEl = !!document.documentElement; ... if(hasDocEl){ scrollX = document.documentElement.scrollLeft; } 转换到字符串类型
对于 parseFloat 解析空字符串将会返回对于 parseFloat 解析空字符串将会返回 NaN ,是因为空字符串不属于数字表达式 。指数可以被解析,由0起头的八进制不会阻止字符串解析为十进制数 。十六进制数却因为 "x" 无法作为数字被解析而停止解析而返回一个零 。 非字符串类型转换成为快速转换,作为一个字符串传递给 parseFloat 。当那些类型转换作为字符串时不在是正常的结果,它的解析结果是 NaN,Objects 和 functions 。可能有自定义 toString 方法返回字符串将会被解析成为数值,这是一个特殊的要求 。 parseInt parseInt 函数偶尔被用作转换单精度浮点数值类型为整型 。由于这种转换首先要从字符串类型转换到单精度数值类型所以是不太适用的 。另外由于它会产生一些错误,所以变得非常没有效率,比如 2e-200 这个科学计数法的数值正确的返回因该是零,但是 parseInt 返回 2 。并且由于是Javascript 格式化,数值常常返回的是一些近似值 。比如 1/2 + 1/3 + 1/6 = 0.9999999999999999 ,这个表达式的结果的近似值应该是 1 ,但 parseInt 竟会返回 0 。 注 Math.round 函数执行的是常见的四舍五入,0.4以及一下将会被忽略,0.5以及以上将会被加1 。Math.ceil 函数在只要有小数的情况是就加1 。Math.floor 函数则无论小数大小都会被忽略 。由这些函数的定义可知 parseInt 方法对于小数采取的是同 Math.floor 一样的处理方式 。 ToInt32 甚至 undefined, objects 和 functions 都被转换为 0,布尔值 true 被转换成了数值 1 。 |