4. 数据类型
数字(Number)类型
和其他编程语言不同,Javascript不区分整数值和浮点数值;Javascript中所有数字均用浮点数值标识。
var x1=34.00; // 使用小数点来写
var x2=34; // 不使用小数点来写
var y=123e5; // 12300000
var z=123e-5; // 0.00123
1.数值范围
最大值是± 1.7976931348623157e+308,最小值是±5e- 324;如果使用了超过此范围的整数则无法保证低位数字的精度,需要注意的是,Javascript中实际的操作都是基于32位整数。
比较有意思的一个例子:
var a=0.1;
var b=0.2;
console.log(a+b) // 结果返回: 0.30000000000000004
/*
IEEE单精度格式具有24 位有效数字精度(包含符号号),并总共占用32 位。
IEEE双精度格式具有53 位有效数字精度(包含符号号),并总共占用64 位。
十进制0.1
原码:0.00011001100110011…(循环0011)
补码:0.00011001100110011001100110011001100110011001100110011001
而十进制0.2
原码:0.0011001100110011…(循环0011)
补码:0.00110011001100110011001100110011001100110011001100110011
那么两者相加得:
0.00011001100110011001100110011001100110011001100110011001 +
0.00110011001100110011001100110011001100110011001100110011 =
0.01001100110011001100110011001100110011001100110011001100
转换成10进制之后得到:0.30000000000000004
*/
2. NaN
NaN ,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
isNaN() 函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)
字符串(String)类型
String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(”)或单引号(’)表示,因此下面两种字符串的写法都是有效的:
var firstName = "Nicholas";
var lastName = 'Zakas';
String 数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:
字 面 量 | 含 义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\’ | 单引号( ‘ ),在用单引号表示的字符串中使用。例如: ‘He said, \’hey.\” |
\” | 双引号( ” ),在用双引号表示的字符串中使用。例如: “He said, \”hey.\”” |
\xnn | 以十六进制代码 nn 表示的一个字符(其中 n 为0~F)。例如, \x41 表示 “A” |
\unnnn | 以十六进制代码 nnnn 表示的一个Unicode字符(其中 n 为0~F)。例如, \u03a3 表示希腊字符Σ |
Javascript 字符串直接量必须写在一行中,如需拆分成数行,每行必须以反斜线(\)结束。
var str="This is \
long string"
布尔(Boolean)类型
布尔(逻辑)只能有两个值:true 或 false。
var x=true;
var y=false;
var message = "Hello world!";
if (message){
alert("Value is true");
}
注意: Boolean 类型的字面值 true 和 false 是区分大小写的。 True 和 False 都不是 Boolean 值,只是标识符。
各种数据类型及其对应的Boolean转换规则:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “” (空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和 NaN |
Object | 任何对象 | null |
Undefined | n/a | undefined |
数组(Array)类型
数组(array)是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,成为索引。数组的值可以是任意类型。
1.创建数组
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
var cars=new Array("Saab","Volvo","BMW");
var cars=["Saab","Volvo","BMW"];
2.数组元素的读和写
使用[ ]操作符来访问数组中的一个元素。
var a = ["world"]; //从一个元素的数组开始
var value = a[0]; //读第0个元素
a[1] = 3.14 //写第1个元素
注:javascript数组的索引只能是数字(其他语言可以是字符串,例如PHP $arr[‘username’])
3.稀疏数组
稀疏数组就是包含从0开始的不连续索引的数组。如果数组是稀疏的,length熟悉值大于元素的个数。
a = new Array(5); // 数组没有元素,但是a.length是5
a = []; // 创建一个空数组,length = 0
a[1000] = 0; // 赋值添加一个元素,但是设置length为1001
也可以使用delete产生稀疏数组
4.数组的长度
每个数组都有一个length属性,代表数组中元素的个数。
[].length // => 0 数组没有元素
['a','b','c'] // => 3 最大的索引为2,length为3
可以使用length属性来删除数组元素:
var a = [1,2,3,4,5]; // 创建一个数组
a.length = 3; // 现在a为 [1,2,3]
a.length = 0; // 删除所有元素,a为[]
5.数组元素的添加和删除
为新索引赋值:
var a = []; // 开始是一个空数组
a[0] = "zero"; // 然后向其中添加元素
a[1] = "one";
使用push()方法在数组末尾增加一个或多个元素:
var a = []; // 创建一个空数组
a.push("zero"); // 在末尾添加一个元素
a.push("one","two"); // 再添加两个元素
使用delete运算符删除数组元素:
var a = [1,2,3]; // 创建一个数组
delete a[1]; // a在索引1的位置不再有元素
1 in a; // =>false 数组索引1并未在数组中定义
a.length // =>3 delete操作并不影响数组长度
6.数组遍历
使用for循环遍历数组元素:
var arr = [1,2,3,4];
for(var i = 0; i < arr.length; i++ ){
document.write(arr[i]+"\n");
}
使用for/in循环遍历数组元素:
var arr = [1,2,3,4];
for(var index in arr ){
document.write(arr[index ]+"\n");
}
对象(Object)类型
ECMAScript 中的对象其实就是一组数据和功能的集合。
1.通过 new 操作符来创建对象。创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。
var o = new Object();
2.直接赋值创建对象;由花括号分隔,在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={
firstname : "John",
lastname : "Doe",
id : 5566
};
对象属性有两种寻址方式:
name=person.lastname;
name=person["lastname"];
null和undefined
Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null 。null 是Javascript的关键字,它表示一个特殊值,常用来描述“空值”。typeof结果返回“object”。
Undefined 类型只有一个值,即特殊的 undefined 。 undefined是预定义的全局变量,它不是关键字;它的定义是“未定义”。typeof结果返回“undefined”。
null和undefined都是表示“值的空缺”,两者可以互换。两者都不包含任何方法和属性。
null == undefined // true
null === undefined // false
你可以认为undefined是表示系统级的、出乎意料的或类似错误的值的空缺;而null是表示程序级的、正常的或在意料之中的值的空缺。
typeof 操作符
typeof 检测给定变量的数据类型
"undefined" ——如果这个值未定义;
"boolean" ——如果这个值是布尔值;
"string" ——如果这个值是字符串;
"number" ——如果这个值是数值;
"object" ——如果这个值是对象或 null ;
"function" ——如果这个值是函数。
下面是几个使用 typeof 操作符的例子:
var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"