数据类型

203 阅读5分钟

一、检测数据类型——typeof操作符

undefined—— 值未定义;

boolean   —— 值是布尔值;

string    —— 值是字符串;

number    —— 值是数值;

object    —— 值是对象或 null

function —— 值是函数。

typeof操作符的操作数可以是变量(typeof message),也可以是数值字面量(typeof 97)。

从技术角度讲,函数在 ECMAScript 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。

二、Undefined类型

Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未初始化时,这个变量的值就是 undefined,例如:

var message; 
alert(message === undefined);   //true

等价于:

var message = undefined; 
alert(message === undefined);  //true

三、Null类型

Null 类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null 值表示一个空对象指针,所以使用typeof操作符检测null值时会返回object

实际上,undefined值是派生自null值的,因此 对它们的相等性测试会返回 true

alert(null == undefined);  //true 类型不同

四、Boolean类型

Boolean 类型只有两个字面值:truefalse

这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。

需要注意的是,Boolean类型的字面值 truefalse 是区分大小写的。也就是说,TrueFalse(以及其他的混合大小写形式)都不是 Boolean值,只是标识符。

五、Number类型

1.浮点数值

所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

2.NaN

alert(NaN == NaN);  //false

3.数值转换

有 3 个函数可以把非数值转换为数值:Number()parseInt()parseFloat()。第一个函数,

即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。

Number()函数的转换规则如下:

 如果是Boolean值,truefalse 将分别被转换为 1 和 0。

 如果是数字值,只是简单的传入和返回。

 如果是null值,返回 0。

 如果是undefined,返回NaN

 如果是字符串,遵循下列规则:

    如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1,而"011"会变成 11(注意:前导的零被忽略了);

    如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);

    如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整

数值;

    如果字符串是空的(不包含任何字符),则将其转换为 0;

    如果字符串中包含除上述格式之外的字符,则将其转换为NaN

    如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换

的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

parseInt()函数在转换字符串时,看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaNNumber()对空字符返回 0)。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

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("a1236d"); NaN

六、String类型

String类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示。

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"  

七、Object类型

ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。

var o = new Object(); 

Object的每个实例都具有下列属性和方法。

constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()

hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。

isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in语句

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。