一、检测数据类型——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
类型只有两个字面值:true 和 false。
这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。
需要注意的是,
Boolean
类型的字面值 true 和 false 是区分大小写的。也就是说,True 和 False(以及其他的混合大小写形式)都不是Boolean
值,只是标识符。
五、Number
类型
1.浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
2.NaN
alert(NaN == NaN); //false
复制代码
3.数值转换
有 3 个函数可以把非数值转换为数值:Number()
、parseInt()
和 parseFloat()
。第一个函数,
即转型函数 Number()
可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。
Number()
函数的转换规则如下:
如果是Boolean
值,true 和 false 将分别被转换为 1 和 0。
如果是数字值,只是简单的传入和返回。
如果是null
值,返回 0。
如果是undefined
,返回NaN
。
如果是字符串,遵循下列规则:
如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即”1″会变成 1,而”011″会变成 11(注意:前导的零被忽略了);
如果字符串中包含有效的浮点格式,如”1.1″,则将其转换为对应的浮点数值(同样,也会忽略前导零);
如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整
数值;
如果字符串是空的(不包含任何字符),则将其转换为 0;
如果字符串中包含除上述格式之外的字符,则将其转换为NaN
。
如果是对象,则调用对象的valueOf()
方法,然后依照前面的规则转换返回的值。如果转换
的结果是NaN
,则调用对象的toString()
方法,然后再次依照前面的规则转换返回的字符串值。
parseInt()
函数在转换字符串时,看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()
就会返回NaN
;也就是说,用parseInt()
转换空字符串会返回NaN
(Number()
对空字符返回 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()方法的返回值相同。