ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined、Boolean、Null、String和Number。还有一种复杂数据类型——Object。
typeof操作符
typeof用来检测给定变量的数据类型。typeof通常会返回以下字符串:
- “Undefined“——如果这个值未定义;
- “boolean”——如果这个值是布尔值;
- “string”——如果这个值是字符串;
- “number”——如果这个值是数值;
- “object”——如果这个值是对象或null;
- “function”——如果这个值是函数。
typeof不是函数,typeof返回值是字符串类型。
Undefined类型
当声明一个变量,未对变量进行初始化时,使用typeof操作符时,返回值为undefined。
var a;
console.log(typeof(a)); //undefined
var a = undefined;
console.log(a == undefined); //true
console.log(b); //ReferenceError
console.log(typeof(a)); //undefined
console.log(typeof(b)); //undefined
Null类型
null表示一个空对象指针,这也是使用typeof操作符检测null值时,会返回“Object”的原因。
var a = null;
console.log(typeof(a)); //object
如果要创建一个空对象时,最好将对象赋值为null,这样在以后使用时,只需要检测null值就可以知道变量是否已经保存了对象的引用。
var person = null;
if (car != null) {
// 对person对象进行操作
}
undefined值是派生自null值得,因此ECMA-262规定对它们的想等性测试返回true
console.log(null == undefined); //true
建议:声明空变量时,不用将其赋值为undefined,即undefined一般不显示使用;声明空对象时,应将其赋值为null,这体现了null表示一个空对象指针。
Boolean类型
Boolean类型有两个值,即true和false,并且Boolean类型区分大小写,因此不能将true写成True,不能讲false写成False。
Boolean字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。将一个值转换为Boolean类型,只需要调用Boolean()函数即可。
var message = "hello world";
var messageAsBoolean = Boolean(message);
console.log(`${messageAsBoolean} : ${typeof messageAsBoolean}`) //true : boolean
数据类型 | true | false |
---|---|---|
Boolean | true | false |
String | 任何字符串 | “ ”(空字符串) |
Number | 任何非零数(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
因为存在任何类型可以转换为Boolean类型,所以对理解流程控制语句自动执行响应Boolean转换非常重要。
var message = "hello world";
if (message) {
console.log(message);
}
Number类型
在进行算术计算时,所有以八进制和十六进制表示的数值都将转换成十进制。浮点数需要的空间是整数需要空间的两倍,因此ECMAScript会尽可能的将其保存为整数类型。使用Number类型时,对于较大的数字可以采用科学技术法,如31250000可以表示为3.125e7
。
由于内存的限制,ECMAScript保存的数值是有大小的,最大值保存在Number.MAX_VALUE中,最小值保存在MIN_VALUE中。如果超过了这两个范围就会将其转换为infinity(无穷大)。使用isFinite()函数
可以判断一个数是否在有效的范围内,如果不在有效的范围内,将不能继续执行运算。
NaN数据类型
NaN,即非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。NaN有两个非同寻常的特点:==任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,也包括本身==。
console.log(NaN == NaN) //false
可以使用isNaN()函数
来判断一个数是否是NaN类型,isNaN()函数接收一个值时,会尝试将这个值转换为一个数。
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false
console.log(isNaN("10")); //false
console.log(isNaN("blue")); //true
console.log(isNaN(true)); //false
isNaN()也可以用于对象,对象调用isNaN()时,会首先调用valueOf()方法,然后确定该方法返回值是否可以转换为数值。如果不能基于这个值调用toString()方法,在测试返回值。
数值转换
Number()、parseInt()和parseFloat()可以将非数值转换为数值类型。
Number()函数的转换规则:
- 如果是Boolean值,true转为1,false转为0;
- 如果是null,返回0;
- 如果是undefiend值,返回NaN;
- 如果是字符串
- 如果字符串中包含数字就转换为十进制数值,且把前面的0去了。如“123”转为123,“011”转为11;
- 十六进制会转为十进制;
- 空字符串转为0;
- 如果是其他字符串时,将其转为NaN;
- 如果是对象,则调用valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用toString()方法,然后依次按照前面的规则进行转换。
var num = Number("hello world"); //NaN
一元加操作与Number()函数相同。
parseInt()函数的转换规则:
- 如果第一个字符串不是数字字符或者符号,返回NaN;
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
parseInt()函数会接受第二个参数,指定转换时使用的基数。
parseFloat()同parseInt(),唯一不同是,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
String类型
String字符串一旦创建就不可以改变,除非先销毁原字符串在重新进行赋值。
转换为String类型
使用几乎每个值都有的toString()方法。除了null和undefined没有toString()方法外,数值、布尔值、字符串和对象都有toString()方法。
var age = 11;
var ageAsStr = age.toString(); //"11"
var found = true;
var foundAsStr = found.toString(); //"true"
在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。默认情况,toString()以十进制格式返回数值的字符串表示。
var num = 10;
console.log(num.toString()) //"10"
console.log(num.toString(2)) //"1010"
console.log(num.toString(8)) //"12"
console.log(num.toString(10)) //"10"
console.log(num.toString(16)) //"a"
在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。使用String()方法时,如果要转换的值有toString()方法,则调用这个方法,如果是null则返回“null”,如果是undefined则返回“undefined”。
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
console.log(String(value1)); //"10"
console.log(String(value2)); //"true"
console.log(String(value3)); //"null"
console.log(String(value4)); //undefined
要把某个值转换为字符串,可以使用加号操作符把它与一个“”(空字符)加在一起。
Object类型
浏览器环境中的对象,比如,BOM和DOM中的对象,都属于宿主对象,它们是由宿主实现提供和定义的。
对象详细将会单独写出。
网友评论