javascript数据类型归纳:看这一篇就够了
javascript数据类型归纳:看这一篇就够了alert(null == undefined); //true但是两者还是有区别的,如果一个变量暂时不赋值,将来要使用。我们不会把一个变量显示的定义为undefined,而是会定义为null。var car = null; alert(typeof car); //object实际上undefined值是派生自null值得,如下例:var message = "some string"; alert(typeof message); // "string" alert(typeof (message)); // "string" alert(typeof 95); // "number"2 Undefined类型Undefined类型只有一个值,级特殊的undefined。在使用var声明变量,但未对其加以初始化时,这
数据类型ECMAScript中有5中简单的数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂的数据类型——Object
注:Object本质上是有一组无序的键值对组成的
1 typeof操作符鉴于ECMAScript是松散类型的,因此需要一个手段来检测给定的变量时什么类型,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"
2 Undefined类型
Undefined类型只有一个值,级特殊的undefined。在使用var声明变量,但未对其加以初始化时,这个变量就是undefined,例如:
var message;
alert(message == undefined); // true
也可以将变量直接初始化为undefined:
var message = undefined;
alert(message == undefined); // true
3 Null类型
Null类型是第二个只有一个值得数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空**对象**指针,这也正是为什么用typeof检测null值会返回object的原因:
var car = null;
alert(typeof car); //object
实际上undefined值是派生自null值得,如下例:
alert(null == undefined); //true
但是两者还是有区别的,如果一个变量暂时不赋值,将来要使用。我们不会把一个变量显示的定义为undefined,而是会定义为null。
4 Boolean类型Boolean类型是ECMAScript中使用得最多的一种类型,该类型有两个字面值:true和false。
var found = true;
var lost = false;
虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。也就是说能够定义的所有值要么能转成true,要么能转成false,可以用转型函数Boolean()转化。
var message = "Hello world";
var messageAsBoolean = Boolean(message);
alert(messageAsBoolean); //true
下表给出了各种数据类型及其对应的转换规则:
注:n/a(或N/A),是not applicable的缩写,意思是“不适用”。
在流程控制语句中,会自动执行Boolean转换,如下所示:
var message = "Hello world!";
if (message) { //这里执行了Boolean转换,将message转为true
alert("Value is true");
}
5 Number类型
Number类型应该是ECMAScript中最令人关注的数据类型了,直接上例子:
var intNum = 55; // 十进制的55
var octalNum = 070; // 八进制的56
var hexNum = 0xA; // 十六进制的10
1.浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有以为数字,浮点数值的例子:
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但不推荐
由于浮点数值占用的内存是整数值的两倍,所以ECMAScript会不失时机地将浮点数值转换为整数值,如下所示:
var floatNum1 = 1.; //小数后面没有数字——解析为1
var floatNum2 = 10.0; //整数——解析为10
还有一种可以表示极大或极小的浮点数值的方法——e表示法,如下所示:
var floatNum = 3.125e7;
其含义是3.125*10^7
var floatNum = 3e-7;
其含义是3*10^(-7)
2.数值范围
由于内存的限制,ECMAScript并不能保存世界上所有的数值。ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中,这个数值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中,这个数值是1.7976931348623157e 308。如果某次计算的结果超过这个范围,则会被转换成特殊的Infinity值。
var result = Number.MAX_VALUE Number.MAX_VALUE;
alert(isFinite(result)); //false
3.NaN
NaN,即非数值(Not a Number),这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,当计算错误的时候,不会抛出错误,而是返回一个NaN,这样就不会影响后面代码的执行。
- 任何涉及NaN的操作(例如NaN/10)都会返回NaN
- NaN与任何值都不相等,包括NaN本身
alert(NaN == NaN); //false
alert(isNaN(NaN)); //true
4.数值转换
有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。
- Number()——可以用于任何数值类型
- parseInt()——用于字符串转数值
- parseFloat()——用于字符串转数值
Number()函数的转换规则如下:
- 如果是Boolean值,true和false将分别被转换为1和0
- 如果是数字值,只是简单的传入和返回
- 如果是null值,返回0
- 如果是undefined,返回NaN
- 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回值
- 如果是字符串,遵循以下规则:
- 如果字符串中包含数字,则将其转换为十进制数值
- 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值
- 如果字符串中包含有效的十六进制格式,如"0xf",则将其转换为相同大小的十进制整数值
- 如果字符串是空的,则将其转换为0
- 如果字符串中包含除上述格式之外的字符,则将其转换为NaN
例如:
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
由于Number()在转换字符串时比较复杂而且不够合理,因此更常用的是parseInt()函数。parseInt()会从字符串第一个非空格字符开始扫描,如果第一个字符不是数字符号或者负号,parseInt()就会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,知道遇到一个非数字字符。例如,"1234blue"会被转换为1234。"22.5"会被解析成22。
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
var num8 = parseInt("f" 16); // 15(十六进制数,另一种写法,推荐这么写)
parseFloat()与parseInt()类似,但有两点区别:
- parseFloat()解析字符串中的第一个小数点是有效的,而第二个小数点无效
- parseFloat()始终会忽略前导的零
- 十六进制的字符串始终会被转换成0
- 如果字符串可以解析为整数,那么parseFloat()会返回整数
var num1 = parseFloat("1234blue"); // 1234(整数)
var num2 = parseFloat("0xA"); // 0
var num3 = parseFloat("22.5"); // 22.5
var num4 = parseFloat("22.34.5"); // 22.34
var num5 = parseFloat("0908.5"); // 908.5
var num6 = parseFloat("3.125e7"); // 31250000
6 String类型
String类型用于表示有零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以用双引号(")或单引号(')表示,因此下面的写法都是有效的:
var firstName = "Kobe";
var lastName = 'Bryant';
1.字符字面量
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:
2.字符串的特点
ECMAScript中的字符串是**不可变**的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符,首先要销毁原来的字符串,然后在用另一个包含新值得字符串填充该变量,例如:
var lang = "Java";
lang = lang "Script";
第二行的动作是,创建一个能容纳10个字符的新字符串,然后在这个字符串中填充"Java"和"Script",然后将原来的字符串"Java"和字符串"Script"销毁。
3.转换为字符串
要把一个值转换为一个字符串有两种方式。
a. toString()方法,该方法返回字符串的一个副本
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"
由于null和undefined值没有toString()方法,可以用下面的String()方法转换为字符串
b.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"
7 Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。Object对象创建的方法如下:
var o = new Object();
Object的每个实例具有如下属性和方法:
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数就是Object()
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象中是否存在
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型
- propertyIsEnumerablepropertyName():用于检查给定的属性能否能用for-in语句来枚举
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同
如果这篇博客对你有用,点个赞再走呗~