(看了一些视频后感觉,其实在对这个语言没有了解之前,看书还是要深刻一点)
六个类型:Undefined,Null,Boolean,Number,String,Object
对于Undefined类型,只有一个值undefined。
Null类型:undefined是由null派生的,所以null==undefined。可将保存对象的变量初始化为null。
Boolean则有true和false,同时其他类型的值都有对应的Boolean值:
Boolean()函数可将值转换为对应的Boolean值,if等语句会自动执行相应的转换,所以if("Hello,World")这样的语句是合法的。
Number类型有整数也有浮点数,格式IEEE754。
数值范围:Number.MIN_VALUE (值为5e-324,与Number.NEGATIVE_INFINITY里的值相同),Number.MAX_VALUE (值为1.7976931348623157e+308,与Number.POSITIVE_INFINITY里的值相同),使用Isfinite()函数可以判断一个数是否位于最大值和最小值之间。
需要注意的是,由于IEEE754对于浮点数值计算的通病,会导致误差,比如0.1+0.2的结果会是0.30000000000000004(见JavaScript高级程序设计第三版P28)。
NaN,即非数值,是一个特殊的值,用于表示一些本来要返回数值的操作数未返回数值的情况。比如,数值除以非数值,返回NaN,不会影响其他代码的执行。同时,任何涉及NaN的都会返回NaN,比如NaN/10返回NaN,而且NaN与任何值都不相等,NaN==NaN就会返回false,不过可以用isNaN()判断一个值是不是数值,除了可以转换为数值的值,其他值都会返回true,即不是数值,如NaN,"Hello,world",而"10","true"之类的就能转换为数值,所以返回false。//貌似isNaN()的参数甚至可以是对象,但是我还不太懂具体的。
三个把值转换为数值的方法,Number(),parseInt(),parseFloat()。第一个适用于任何类型的值,后两个只能操作字符串,转换时遇到无效的字符即停止。
Number():
强制类型转换,忽略前导0,即不会将"011"当成八进制,而是当成11,其他基本和parseInt()和parseFloat()相同,转换字符串时通常用parseInt()和parseFloat()。
parseInt():
转换为10进制整数:
parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
按进制将给定字符串转换为10进制整数:
parseInt("AF", 16); //returns 175
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
对于ES 3,parseInt("010")返回8,对于ES 5则返回10,忽略前导0。
parseFloat():
parseFloat("1234blue"); //returns 1234.0
parseFloat("0xA"); //returns NaN
parseFloat("22.5"); //returns 22.5
parseFloat("22.34.5"); //returns 22.34
parseFloat("0908"); //returns 908
parseFloat("blue"); //returns NaN
String类型,JavaScript中的字符串不可变,因此操作时会先销毁原来的,如
var a = "java";
a += "script";
则第二行会先创建一个能容纳十个字符的空间,然后把里面填充好"javascript",最后一步销毁原来的字符串"java"和"script"。
转换其他值为String,可用toString()和String()。如var num = 10; num.toString(); 当toString操作的是数值的时候,还可以加上参数,表示转换为该进制下的字符串。
Object类型
创建:var a = new Object();
Object中自带的属性和方法:
constructor:保存着用于创建当前对象的函数。
hasOwnProperty(propertyname):检查指定属性是否在对象中存在。
isPrototypeOf(object):检查传入的对象是否是当前对象的原型。
propertyIsEnumerable(propertyname):检查给定的属性是否能通过for-in语句枚举。
toLocaleString():返回对象的字符串表示,与执行环境的地区相对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串,数值或布尔值表示。通常与toString()的返回值相同。
//宿主对象,如BOM和DOM中的对象,可能会也可能不会继承Object。