标识符:字母,下划线,美元符号,数字。变量名的第一个字符不可以是数字。
严格模式:ECMAScript 5引入了严格模式的概念。在严格模式下,ECMAScript 3中的一些不确定的行为将得到处理,而且对于某些不安全的操作也会抛出错误。
在脚本中启用严格模式,可以在脚本顶部添加代码。"use strict"。
也可以在函数内部的上方包含这条指示,指定函数在严格模式下执行。
支持严格模式的浏览器包括IE10+,FireFox4+,Safari 5.1+,Opera12+和Chrome。
变量:
松散类型。也就是说var仅仅是一个占位符,我的理解是变量保存的永远是地址值,因此var一个变量以后,可以先后存入不同类型的数据。如果var一个变量后,没有对它赋值,那么这个变量会存储undefined值。
另外,在函数中,使用var声明一个变量,这个变量就是局部变量。而如果省略var操作符,这个变量就是全局变量。但是不推荐省略var操作符。因为在局部作用域中定义的全局变量很难维护。因此在严格模式下,给未经声明的变量赋值会抛出ReferenceError错误。
数据类型:
五种基本数据类型:Undefined Null Boolean Number String
一种复杂数据类型:Object
typeof操作符
用于检测变量类型
可能返回的字符串:undefined(变量未定义),boolean,number,string,object(对象或null),function
typeof是一个操作符,因此可以直接typeof 变量名,后面的圆括号不是必需的。
undefined类型
引入这个值的目的是为了区分空对象指针和未经初始化的变量。
对于尚未声明的变量,只能有一种操作,就是typeof,会返回"undefined"值。(在严格模式下delete会报错)
对于声明了但未初始化的变量,里面存储的就是undefined值,可以有alert,==等操作。
null类型
空对象指针
typeof检测null时会返回object
如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值。这样就可以直接检测null来判断它是否已经保存了一个对象的引用。
if(car!=null){
对car对象执行某些操作
}
实际上undefined是派生自null值,所以undefined==null返回true。
boolean类型
true和false(区分大小写)
其他数据类型转换为对应的boolean类型时,可调用转性函数Boolean()。如果不使用这个函数,会显示一个警告框,变量会进行自动转换。
会转换成false的一些情况:
string ""
Number 0和NaN
Object null
undefined 一定是false
Number类型
- 整数:
var a=10;//十进制
var a=010;//八进制
var a=0x10;//十六进制
- 浮点数:
var a=1.1
由于保存浮点数所需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数转换为整数值。
所以如果小数点后没有跟任何数值,或者只有0,那么该值会被自动转换为整数。
例如var f=10.0//整数,解析为10
跟python和java一样,永远不要测试特定的浮点数值!
- 数值范围的限制:
Number.MIN_VALUE是最小值,Number.MAX_VALUE是最大值。如果超出了这个数,Number的值会被自动转换成
Infinity或者-Infinity。Infinity不能参与计算,不是可计算的数值。可以使用isFinite()函数来检测。
- NaN
Not a Number。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。在其他编程语言中,任何数值除以非 数值都会报错。在ECMAScript中,任何数值除以非数值都会返回NaN。因此不会影响其他代码的执行。
NaN与任何值都不相等,包括NaN本身。为了解决这个问题,ECMAScript定义了isNaN函数,这个函数接受一个参数,该 参数可以是任何类型。如果这个参数可以被转换为Number则返回false,如果不行则返回true。
譬如,isNaN("123")//false,转换为123
- 数值转换
Number() //适用于任何类型,如果是true,返回1,如果是false,返回0,如果是null,返回0,如果是undefined,返回 NaN。
对于字符串,会忽略前导0,如果字符串中有包含有效的十六进制,例如“0xf",则会将其转换为相同大小的十进制整数 值,如果字符串是空的,返回0,如果字符串包含有效的浮点格式,则将其转换成对应的浮点数值。如果字符串包含上述 之外的字符,则将其转换成NaN。
譬如 Number("123blue")返回NaN
因此可见,使用Number转换字符串为数字并不合理。
parseInt(),parseFloat() //适用于字符串
在处理字符串转换数字时,更常用的是parseInt和parseFloat函数。第一个有效字符必须是数字。一直遇到第一个非数字字 符为止。parseInt(字符串,进制)。parseFloat只解析十进制。第二个小数点就是无效字符。
parseInt()函数与Number的区别是
对于空字符串,Number返回0,parseInt返回NaN。
对于“123blue",Number返回NaN,parseInt返回123。
string类型
可以用双引号/单引号。没有区别
具有length属性。
不可变。如果要改变某个变量存储的字符串,要先销毁原来的字符串,再用另一个包含新值的字符串填充该变量。
把 一个值转换为字符串有两种方式,第一种是使用几乎每个值都有的toString()方法。如number,boolean,object,string类型 都有toString()方法。string.toString返回字符串的副本。但是null和undefined没有这个方法。因此在不确定转换的值的情况 下,可以用String函数。String函数遵循的规则是,如果有toString方法,调用这个方法,如果没有,返回字面量
("null","undefined")。
在调用number的tostring方法时,可以加一个参数用于指定进制。
任何变量与字符串相加都会变成字符串。