ECMAScript中有5种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型--Object,Object本质上是由一组无序的名值对组成的。函数
2.4.1 typeof操做符指针
typeof操做符用来检测给定变量的数据类型,可能的返回值:code
"undefined" 这个值未定义
"boolean" 这个值是布尔值
"string" 这个值是字符串
"number" 这个值是数值
"object" 这个值是对象或null
"function" 这个值是函数
例子:对象
var name = 'tg'; console.log(typeof name); // "string" console.log(typeof (name)); // "string" console.log(typeof {}); // "object"
typeof是一个操做符,后面的圆括号无关紧要。ip
2.4.2 Undefined类型内存
Undefined类型只有一个值,即特殊的undefined。字符串
若是在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。原型
var name; console.log(name == undefined); // true
对于未声明过的变量,只能执行一项操做,即便用typeof操做符检测其数据类型(对未声明的变量调用delete不会致使错误(在非严格模式下))string
2.4.3 Null类型it
Null类型也是只有一个值的数据类型,这个特殊值就是null。null值能够看做是一个空对象指针。
console.log(typeof null); // "object"
undefined实际上是派生自null值:
console.log(null == undefined); // true
Boolean类型有两个字面值:true和false,两个值是区分大小写的。
要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean():
var name = 'tg'; console.log(Boolean(name); // true
能够对任何类型的值调用Boolean函数,并且总会返回一个Boolean值(true或false)
转换规则:
对于true或false,返回原值(true或false)
对于String类型的值,任何非空字符串返回true,空字符串("")返回false
对于Number类型的值,任何非零数字值(包括无穷大),返回true;0和NaN返回false
对于Object类型的值,任何对象返回true,null返回false
对于Undefined类型,undefined返回false(只有一个值)
2.4.5 Number类型
最基本的数值字面量格式是十进制整数。
var num = 15;
八进制(以8为基数) 以0开头,后面是(0~7)
var num = 070; // 八进制的56
十六进制(以16为基数) 以0x开头,后面是(0~9及A~F),字母A~F能够大小写。
var num = 0xA; //十六进制的10
注意:在进行算术计算时,全部以八进制和十六进制表示的数值都会被转换成是十进制。
1.浮点数值
浮点数值指包含一个小数点,而且小数点后面必须至少有一个数字。
var floatNum = 1.1;
保存浮点数值须要的内存空间是保存整数值的两倍。
对于那些极大或极小的数值,咱们可使用科学计数法(e表示法)来表示浮点数值。
e表示法表示的数值等于e前面的数值乘以10的指数次幂:
var floatNum = 3.125e7; // 31250000 var floatNum1 = 3e-7; //0.0000003
默认状况下,ECMAScript会将那些小数点后面带有6个零以上的浮点数值转换为以e表示的数值。
var floatNum1 = 3e-7; //0.0000003
浮点数的最高精度是17位小数。
0.1 + 0.2 = 0.3000000000000004; // 不是等于0.3
2.数值范围
基于内存的限制,ECMAScript只能保存有限的数值。
ECMAScript可以表示的最小数值保存在Number.MIN_VALUE(最小值)中,这个值是5e-324;可以表示的最大数值保存在Number.MAX_VALUE(最大值)中,这个值是1.7976931348623157e+308.
若是某次计算的结果获得了一个超出JavaScript数值范围的值,那么这个数值就会被转换成特殊的Infinity值;若是这个值是负数,则会被转换为-Infinity(负无穷),若是这个数值是整数,则会转换成Infinity(正无穷)。
注意:Infinity是不能参与计算的数值。
用isFinite()来判断这个值是否无穷,该函数接受一个参数。若是参数位于最小与最大数值之间,返回true。
console.log(isFinite(1)); //true console.log(isFinite(Infinity)); // false
3.NaN
NaN(Not a Number)表示非数值,这个数值用于表示一个原本要返回数值的操做数未返回数值的状况。
注意点:
任何涉及NaN的操做都会返回NaN。
NaN与任何值都不相等,包括NaN自己。
console.log(NaN == NaN); //false
咱们能够用isNaN()函数来判断是否非数值,该函数接受一个参数,能够是任何类型。
console.log(isNaN(NaN)); // true
isNaN()在接收到一个值(能够是任何类型)以后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,好比:字符串"10"或Boolean值。而任何不能被转换为数值的值都会致使这个函数返回true。
console.log(isNaN(NaN)); // true console.log(isNaN(10)); // false console.log(isNaN('blue')); // true
4.数值转换
有3个函数能够把非数值转换为数值:Number()、parseInt()和parseFloat()
转型函数Number()能够用于任何数据类型,后面两个是专门用于把字符串转换为数值。
Number()函数的转换规则:
若是是Boolean值,true和false将分别转换为1和0
若是是数字值,只是简单的传入和返回
若是是null值,返回0
若是是undefined,返回NaN
若是是字符串中只包含数字(包括前面带正负号),则将其转换为十进制数值(前导的零会被忽略)
若是字符串中包含有效的浮点格式,如1.1,则将其转换为对应的浮点数值
若是字符串中包含有效的十六进制,如0xf,则将其转换为相同大小的十进制数值
若是字符串是空的,返回0
若是字符串中包含上述格式之外的字符,返回NaN
若是是对象,则调用对象的valueOf()方法,而后依照前面的规则转换返回的值。若是转换的结果是NaN,则调用对象的toString()方法,而后再次依照前面的规则转换返回字符串值
console.log(Number('tg')); // NaN console.log(Number('')); // 0 console.log(Number('0011')); // 11 console.log(Number(true)); //1
一元加操做符的操做与Number函数规则相同。
parseInt()
parseInt()会忽略字符串前面的空格,直到找到第一个非空格字符。若是第一个字符不是数字字符或负号,就会返回NaN。若是第一个字符是数字字符,就会继续解析,直到解析完全部后续字符或者遇到了一个非数字字符。
parseInt()也能识别八进制(在ECMAScript 5中没法识别,将开头的0看成0)和十六进制,最后会转换成十进制。
console.log(parseInt('123tg')); // 123 console.log(parseInt('')); // NaN console.log(parseInt('070')); // 70 console.log(parseInt('0xf')); //15 console.log(parseInt(22.5)); // 22
咱们还能够为parseInt()提供第二个参数,指定须要转换的进制。
console.log(parseInt('0xAF',16)); // 175 console.log(parseInt('AF',16)); // 175 console.log(parseInt('AF')); // NaN console.log(parseInt('070',8)); // 56 console.log(parseInt('70',8)); // 56
若是提供了第二个参数,要转换八进制和十六进制时,可省略0和0x。
parseFloat()和parseInt()相似,也是从第一个字符(位置0)开始解析每一个字符,并且一直解析到字符串末尾,或者解析到遇到一个无效的浮点数字字符为止,换句话说,字符串中的第一个小数点是有效的,后面的小数点是无效的,它还会忽略前导的零,只会解析十进制值。
console.log(parseFloat('123tg')); // 123 console.log(parseFloat('22.12.4')); // 22.12 console.log(parseFloat('070')); // 70 console.log(parseFloat('0xf')); //0 console.log(parseFloat(22.5)); // 22.5
2.4.6 String类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串能够由双引号或单引号表示。
var name = 'tg';
用双引号表示的字符串和用单引号表示的字符串彻底相同,但要确保引号先后一致,也就是说以双引号开头的必须以双引号结尾,以单引号开头的必须以单引号结尾。
1.字符字面量
String数据类型包含了一些特殊的字符字面量,也叫转义序列。
\n 换号 \t 制表 \b 空格 \r 回车 \f 进纸 \\ 斜杠 \' 单引号 \" 双引号 \xnn 以十六进制代码nn表示的一个字符(n为0~F),好比:\x41表示"A" \unnn 以十六进制代码nnnn表示的一个Unicode字符(n为0~F)。好比:\u03a3表示Σ
这些字符字面量能够出如今字符串中的任意位置,会被当作一个字符来解析。
var name = 'tg\u03a3'; console.log(name); //tgΣ console.log(name.length); // 3
任何字符串的长度均可以访问其length属性取得。
2.字符串的特色
ECMAScript中的字符串是不可变的。一旦建立,值就不会改变。
后台逻辑:要改变某个变量保存的字符串,首先要销毁原来的字符串,而后用另外一个包含新值的字符串填充该变量。
3.转换为字符串
要将一个值转换为字符串有两种方式:
使用每一个值(null和undefined除外)都有的toString()方法
var age = 1; console.log(age.toString()); // "1"
咱们还能够给toString()传入一个参数,输出数值的基数。
var num = 10; console.log(num.toString()); // "10" console.log(num.toString(2)); // 1010 console.log(num.toString(8)); // 12
可使用转型函数String(),能将任何类型的值转换为字符串,转换规则:
若是值有toString()方法,则调用该方法并返回相应的结果
若是值是null,则返回null
若是值是undefined,则返回undefined
console.log(String(10)); // "10" console.log(String(true)); // "true" console.log(String(null)); // "null" console.log(String(undefined)); // "undefined"
要把某个值转为字符串,还可使用加号操做符:
console.log( true + ''); // "true"
2.4.7 Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。
对象可经过执行new操做符后跟建立的对象类型的名称来建立。
var o = new Object();
若是不传参,能够省略后面的圆括号(不推荐)。
var o = new Object;
在ECMAScript中,Object类型是全部对象的基础。
Object的每一个实例都具备下列属性和方法:
Constructor:保存着用于建立当前对象的函数,好比上面的例子,构造函数就是Object()
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在(而不是在实例的原型中),参数必须是字符串形式
isPrototypeOf(object):用于检查传入的对象是不是另外一个对象的原型
propertyIsEnumerable(propertyName):用于检查给定的属性是否可以使用for-in语句来枚举,参数必须是字符串形式
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
toString():返回对象的字符串表
valueOf():返回对象的字符串、数值或布尔值表示,一般和toString()返回的值相同