数据类型
ECMAScript有5种简单数据类型(也称基本数据类型):
- Undefined
- Null
- boolean
- Number
- String
还有一种复杂数据类型:Object——本质是由一组无序的名值对组成的。
例如:
{
name:"小明";
age:"21";
}
typeof操作符
检测给定变量的数据类型;
var a ;
console.log(typeof a); //undefined
var b = 1 ;
console.log(typeof b); //number
var c = true;
console.log(typeof c); //boolean
var d = "hello";
console.log(typeof d); //string
var e = {};
console.log(typeof e); //object
var f = null;
console.log(typeof f); //object
var h = function(){
}
console.log(typeof h); //function
"undefined"——这个值未定义;
"number"——这个值是数值;
"boolean"——这个值是布尔值;
"string"——这个值是字符串;
"object"——这个值是对象或null;
"function"——这个值是函数;
null是一个特殊值,被认为是一个空的对象引用。
1.Undefined类型
只有一个值,就是本身undefined;
在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined;
var a ;
console.log(typeof a); //undefined
没有使用var声明的变量则会报错
a
console.log(age); //a is not defined
2.Null类型
和Undefined一样,只有一个值,null。
如果定义的变量将用于保存对象的情况下,初始化值定义为null。
方便直接检查定义的对象里是否有值,没有就会返回null;
3.Boolean类型
它有两个字面值:
true;
false;
所有类型的值都和boolean的值存在等价的值。
将一种数据类型的值转换为其对应的boolean值,可以调用Boolean();
各种数据类型转换成boolean值得规则:
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | “ ”(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0或NaN |
Object | 任何对象 | null |
Undefined | N/A(not applicable :不适用) | undefined |
4.Number类型
表示整数和浮点数值。
浮点数值:该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
var floatnum1 = 1.1;
var floatnum2 = 1.; //小数点后面没有数字——解析为1
var floatnum3 = .1 ;//解析为0.1,不推荐这种写法
var floatnum4 = 10.0;//整数——解析为10
数值范围
ECMAScript表示最小数值为5e-324;
最大数值为1.7976931348623157e+308。
在计算中结果超出了最大数值,这个数值将被自动转换成特殊的Infinity(无穷)值;
如果是一个负数,则会被转成-Infinity(负无穷);这两个值无法继续参与下一次计算,因为Infinity是不能参与计算的数值。
isFinite():判断某个数值是不是有穷的,返回值为boolean值。传进去的参数在最小值与最大数值之间返回true,否则为false。
NaN
非数值,是一个特殊值,表示一个本来要返回数值的操作数未返回数值的情况。
特点:
任何涉及NaN的操作都会返回NaN.
NaN与任何值都不相等,包括NaN本身。
console.log(NaN == NaN);//false
isNaN():确定一个值是否为NaN;
当isNaN()接收一个值后,第一步会将这个值转换为数值,任何不能被转换为数值的值都会返回true。
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false(数值)
console.log(isNaN("10")); //false(转换成数值为10)
console.log(isNaN("hello")); //true(不能转换成数值)
console.log(isNaN(true)); //false(可以被转换成1)
数值转换
Number():可以将任何数据类型转换为数值。
转换规则:
是Boolean值,true和false将分别被转换为1和0;
是数字值,简单的传入和返回;
是null值,返回0;
是undefined,返回NaN;
字符串中包含数字,则将其转换为十进制数值;
字符串包含有效的浮点格式,则将其转换为对应的浮点数值。
字符串中包含有效的十六进制格式,则将其转换为相同大小的十进制整数值。
字符串为空,则将其转换为0;
字符串中包含除上述之外的字符,则将其转换为NaN。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number("true"); //1
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(十进制)
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
5.String类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。
字符串可以由双引号(" ")或单引号(‘ ’)表示。
var firstName = "Nicholas";
var lastName = 'Zakas';
字符字面量
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示肥大字符,或者具有其他用途的字符。
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 换页 |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\uXXXX | unicode 码 |
\u{X} ... \u{XXXXXX} | unicode codepoint |
字符串特点:字符串是不可变的,一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
6.Object
对象是一组数据和功能的集合。
在ECMAScript中,Object类型是所有它的实例的基础,即Object类型所具有的任何属性和方法都是存在更具体的对象中。
Object的每个实例都具有下列属性和方法。
- constructor:保存着用于创建当前对象的函数。
- hasOwnProperty:用于检查给定的属性在当前对象实例中是否存在。参数的属性名必须以字符串形式指定。
- isPrototypeOf:用于检查传入的对象是否是当前对象的原型。
- propertyIsEnumerable:用于检查给定的属性是否能够使用for-in语句累枚举。参数的属性名必须以字符串形式指定。
- toLocaleString():返回对象的字符串,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的string、number、boolean表示。通常与toString()方法的返回值相同。