数据类型
ECMAScript中有5种简单的数据类型(也称基本数据类型)和 一种复杂数据类型(也称引用类型)
- 基本数据类型:Undefined、Null、Boolean、Number、String
- 引用类型:object
1. Undefined
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时这个变量的值就是undefined
var message;
alert(message == undefined); //true
2. Null
Null类型是第二个只有一个值得数据类型,这个特殊的值是null。null值表示空指针对象,故使用typeof操作符检测null值时会返回"object",实际上,undefined值是派生自null值的,因此ECMA-262规定对他们的相等性测试要返回true
var car = null;
alert(typeof car); // "object"
alert(null == undefined) //true
3. Boolean
Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true和false。true 不一定等于 1,而 false 也不一定等于 0
var found = true;
var lost = false;
Boolean()
可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。至于返回的是true还是false,取决于要转换值的数据类型及其实际值。下表给出了各种数据类型以及对其对应的转换规则。
数据类型 | 转换为true的值 | 转换为false的值 | |
---|---|---|---|
Boolean | true | false | |
String | 任何非空字符串 | ''(空字符串) | |
Number | 任何非零的数字值(包括无穷大) | 0和NaN | |
Object | 任何对象 | null | |
Undefined | n/a(不适用) | Undefined |
4. Number
1)NaN (Not a Number)
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数为未返回数值的情况(这样就不会抛出错误了)。但在 ECMAScript中,任何数值除以 0会返回 NaN。
NaN有两个不同寻常的特点:
- 任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
- NaN 与任何值都不相等,包括 NaN 本身
alert(NaN == NaN); //false
2)isNaN()
函数,这个函数接受一个参数,该参数可以是任何类型,而这个函数会帮我们确定这个参数是否"不是数值"。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串"10"或 Boolean 值。而任何不能被转换为数值的值都会导致这个函数返回 true。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)
3) 数值转换:Number()、parseInt()和 parseFloat()
转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值
Number()函数的转换规则
- 如果是 Boolean 值true 和 false 将分别被转换为 1 和 0
- 如果是数字值只是简单的传入和返
- 如果是 null 值,返回 0
- 如果是 undefined,返回 NaN
-
如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了)
- 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零)
- 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值
- 如果字符串是空的(不包含任何字符),则将其转换为 0
- 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN
- 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //
2.parseInt()
3.parseFloat()
5. String
string类型用于表示由零或者16位Unicode字符组成的字符序列,即字符串。字符串可以有双引号(")或者单引号(')表示,不过以双引号开头的字符串也必须以双引号结尾,而以单引号开头的字符串必须以单引号结尾。
var firstName = "Nicholas";
var lastName = 'Zakas';
var firstName = 'Nicholas"; // 语法错误(左右引号必须匹配)
1)字符字面量
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表示希腊字符Σ |
2)字符传的特点
ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,他们的值就不能改变。要改变么讴歌变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。例如
var lang = "Java";
lang = lang + "Script";
3)转换为字符串
(1)toString()
数值、布尔值、对象和字符串值 调用toString()都会返回字符串的一个副本,但 null 和 undefined 值没有这个方法。
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"
在调用数值的 toString()方法时,可以传递一个参数:输出数值的基数。默认以十进制格式返回数值的字符串表示,通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示的字符串值。
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"
(2)String()
将任何类型的值转换为字符串。其转换规则如下:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
- 如果值是null,则返回"null"
- 如果值是undefined,则返回"undefined"
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"
6. Object
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如下所示:
var o = new Object();
Object类型所具有的任何属性和方法也同样存在于更具体的对象中。Object的每个实例都具有下列属性和方法。
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。
- hasOwnProperty(propertyName): 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty('name'))。
- propertyIsEnumerable(propertyName): 用于检查给定的属性是否能够使用 for-in 语句来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。