3.4.1 typeof 操作符
返回下列字符串:
① "undefined" —— 如果这个值未定义
② "boolean" —— 如果这个值是布尔值
③ "string" —— 如果这个只是字符串
④ "number" —— 如果这个值是数值
⑤ "object" —— 如果这个值是对象或null
⑥ "function" —— 如果这个值是函数
3.4.2 Undefined类型
Undefined类型只有一个值,即特殊的undefined;
变量未初始化 和 变量未声明 两种情况下都会返回undefined值
3.4.3 Null类型
Null类型只有一个值,即特殊的null;null值表示一个空对象指针。
var car = null;
alert(typeof car); // "object"
如果定义的变量准备用来保存对象,最好初始化为null,这样只要直接检测null值就可以知道是否已经保存了一个对象的引用,如下:
if(car!=null){
//对car对象执行操作;
}
3.4.4 Boolean类型
有true和false两个字面值;
Boolean()函数可以将任何数据类型的值转换成Boolean值;
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | " "(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | / | undefined |
3.4.5 Number类型
① 浮点数值
浮点数值就是数字后面必须包含小数点,并且小数点后面必须至少包含一个数字;
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但不推荐
//from page28
小数点后为0,或者没有数字,直接转换成整数;
科学计数法:
var floatNum = 3.125e7; //等于31250000,相当于3.125*10的7次方
永远不要测试某个特定的浮点值,如下;
var a = 0.1;
var b = 0.2
alert(a+b==0.3); //flase
alert(a+b); //0.30000000000000004
var c = 0.15;
var d = 0.15;
alert(c+d==0.3); //true
//from page28
这是由于浮点数值的精确度不高所导致的,而整数进行计算时精确度远远高于浮点数值;
② 数值范围
最小数值保存在Number.MIN_VALUE中——大多数浏览器的值是5e-324;
最大数值保存在Number.MAX_VALUE中——大多数浏览器的值是1.7976931348623157e+308;
isFinite()函数可以检测一个数值在不在最大和最小之间;
③ NaN
NaN 即非数值(Not a Number)是一个特殊的数值。NaN与任何值都不相等,包括NaN本身。
alert(NaN == NaN); //false
isNaN()函数用来判断是否“不是数值”,isNaN()接收到值后,如果不是数值他会尝试将这个值转换成数值,如下,
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10")); //false(转换成了10)
alert(isNaN("blue")); //true(无法转换)
alert(isNaN(true)); //false(转换成了1)
//from page29
④数值转换
a:Number()函数(少用)
如果是布尔值返回0或1;
如果是数值,只做简单传入和返回;
如果是null值,返回0;
如果是undefined,返回NaN;
如果是字符串,如果只包含数字,将转换成十进制的数值,前导0会忽略(011会变成11),如果包含有效浮点格式,会返回对应的浮点数值(01.1返回1.1),如果字符串是空则返回0,除以上情况返回NaN;
如果是对象,则调用valueOf()方法,如果结果是NaN,则调用toString()方法;
b:parseInt()函数
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt(22.5); //22
var num4 = parseInt("70"); //70
//from page31
c:parseFloat()函数
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("22.5"); //22.5
var num3 = parseFloat("22.34.5"); //22.34
var num4 = parseFloat("0908.5"); //908.5
//from page32
3.4.6 String类型
1.字符字面量
String类型包含一些特殊的字符字面量,叫转义序列;
字面量 | \n | \t | \b | \r | \f | \\ | \' | \" |
含义 | 换行 | 制表 | 退格 | 回车 | 进纸 | 斜杠 | 单引号(') | 双引号(") |
length属性,可以得到字符串的长度;
var text = "hello world;"
alert(text.length); //12 中间的空格也算一个字符
//from page 33
2.字符串特点
字符串一旦创建,他们的值就不能改变。要改变要先销毁原来的字符串,再用另一个包含新值的字符串填充该变量。
3.转换为字符串
① toString()方法
数值、布尔值、对象、字符串都有 toString()方法,但是null和undefined没有。
var age = 11;
var ageAsString = age.toString(); //字符串“11”
//from page 34
② String()方法
这个函数可以将任何类型的值转换成字符串,包括null和undefined。
a:如果值有toString()方法,则调用该方法并返回结果;
b:如果值是null,则返回"null";
c:如果值是undefined,则返回"undefined"。
3.4.7 Object类型
ECMAScript中的对象其实就是一组数据和功能的集合,对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。
var o = new Object();
//var o = new Object; //有效,但不推荐
//from page35
Object每个实例都有下面的属性和方法:
a:constructor:保存着用于创建当前对象的函数。对上面的例子,构造函数(constructor)就是Object();
b:hasOwnProperty(propertyName):检测给定的属性在当前对象实例中(而不是实例的原型中)是否存在;其中参数propertyName必须是字符形式传参;
c:isPrototypeOf(object):用于检测传入的对象是否是当前对象的原型;
d:propertyIsEnumerable(proertyName):检测给定的属性是否能用for-in语句枚举,其中参数propertyName必须是字符形式传参;
e:toLocaleString():返回对象的字符串表示,与执行环境的地区对应;
f:toString():返回对象的字符串表示;
g:valueOf():返回对象的字符串、数值、布尔值表示。