3.3 变量:
ECMAScript 的变量是松散类型的,它可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符而已。
var message = 'hi';
这句代码的意思是,将字符串‘hi’赋值给变量 message ,而不是将 message 变量标记为字符串类型
3.4 数据类型:
由于保存浮点数值需要的内存空间是保存整数值的两倍,因此 ECMAScript 会不失时机地将浮点数值转换为整数值
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。
但在 ECMAScript 中,任何数值除以0会返回 NaN ,因此不会影响其他代码的执行。
NaN 本身有两个非同寻常的特点。首先,任何涉及 NaN 的操作(例如 NaN / 10)都会返回 NaN,这个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包括 NaN 本身。
isNaN() 在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串“10”或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。
尽管有点儿不可思议,但 isNaN() 确实也适用于对象。在基于对象调用 isNaN() 函数时,会首先调用对象的 valueOf() 方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用 toString() 方法,再测试返回值。而这个过程也是 ECMAScript 中内置函数和操作符的一般执行流程,更详细的内容请参见3.5节
把非数值转换为数值有3个函数,这三个函数对于同样的输入会有返回不同的结果
由于 Number() 函数在转换字符串时比较复杂而且不合理
因此在处理字符串转数值的时候更常用的是 parseInt() 函数和 parseFloat() 函数
parseInt() 函数
1、该函数可以接收两个参数,第一个参数可以是数字或字符串,第二个参数是基数,决定以哪种进制去解析第一个参数
2、前缀是0的数字字面量是八进制数,前缀是0x的数字字面量是十六进制数,在使用 parseInt 函数去解析八进制的数字字面量的字符串时,es3和es5存在分歧
3、所以如果是解析八进制字面量字符串时,如‘070’,与其这样写 parseInt('070') 不如这样写 parseInt('070', 8)更安全保险,如果指定了第二个参数,第一个参数的表示进制的前缀可以省略
4、不指定基数意味着让 parseInt() 决定如何解析输入的字符串,因此为了避免错误的解析,建议无论在什么情况下都明确指定基数。多数情况下,我们要解析的都是十进制参数,因此始终将10作为第二个参数是非常必要的。
parseFloat函数
1、parseFloat只接收一个参数,因为它只解析十进制值,该参数可以是数字也可以是字符串
2、如果字符串包含的是一个可以解析为整数的数(没有小数点,或者小数点后都是0),parseFloat() 会返回整数